题解 | #左旋转字符串#
连续子数组的最大和(二)
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
};