题目描述
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)
题目链接:
分析:
用一个变量记录连续和,当小于0时,置为0,从下一个元素重新计算。
用一个变量记录连续和最大值。
public class Solution { public int FindGreatestSumOfSubArray(int[] array) { if(array.length == 0){ return 0; } //记录连续和 int sum = array[0]; //记录最大和 int maxSum = sum; for(int i = 1;i < array.length;i++){ //小于0时,从0开始。注意放的位置。 1、arr[0]为负数的 2、不能将初始化的0与maxSum判断 if(sum < 0){ sum = 0; } sum += array[i]; //若比当前最大值还大,更新最大值 if(sum > maxSum){ maxSum = sum; } } return maxSum; } }