本系列是《剑指offer》或leetcode的JavaScript版本。 每期1-2个算法,也有可能是一个类别。 文章包括题目、思路以及代码。
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。
今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。
但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?
例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。
给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)
1.记录当前累加值,累加最大值
2.遍历数组---当前值
3.累加值小于0,对后面的累加序列就没有贡献了,累加值重置为当前值
4.累加值大于0,累加值+=当前值
5.最大值和累加值比较,取最新的最大值
function FindGreatestSumOfSubArray(array) { if (!array || array.length === 0) { return 0; } let sum = array[0]; let max = array[0]; for (let i = 1; i < array.length; i++) { if (sum < 0) { sum = array[i]; } else { sum += array[i]; } if (sum > max) { max = sum; } console.log(array[i], sum, max); } return max; }