题解 | #左旋转字符串#

连续子数组的最大和(二)

http://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @return int整型一维数组
 */
function FindGreatestSumOfSubArray(array) {
  let arr = new Array(array.length).fill(new Array(2).fill(0))
  arr[0] = [array[0], 1]
  let value = [array[0], 1, 0]  // 当前数组和,数组长度,最后一个元素的索引值
  for (let i = 1; i < array.length; i++) {
    if (arr[i - 1][0] < 0) {
      arr[i][0] = array[i]
      arr[i][1] = 1
    } else {
      arr[i][0] = arr[i - 1][0] + array[i]
      arr[i][1] = arr[i - 1][1] + 1
    }  // 递归更新二位数组,存放以array[i]结尾的最大和数组的和以及长度
    if (
      arr[i][0] > value[0] ||
      (arr[i][0] === value[0] && arr[i][1] > value[1])
    ) {
      value = [...arr[i], i]  // 维护value变量存储当前循环的最大值且最大长度的相关量
    }
  }
  return array.slice(value[2] - value[1] + 1, value[2] + 1)  
  // 根据value[1],value[2]切片得到答案
}
module.exports = {
    FindGreatestSumOfSubArray : FindGreatestSumOfSubArray
};
全部评论

相关推荐

06-10 23:36
已编辑
首都经济贸易大学 C++
点赞 评论 收藏
分享
07-30 11:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务