求数组的最大连续子序列和
1.数组长度至少是1:
- 当数组长度1 直接返回数组0元素
- 当i=1时 cur与max都为0元素 从1开始 当cur+array[1]>array[1]的时候(arr[0]+array[1]>array[1])cur为两个数的和 否则cur从1元素重新开始 记录当前最优 即子数组{array[0],array[1]}的最大子数组长度。
- i++ 遵循上述规则。
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
if(array.length==1)
return array[0];
int max=array[0];
int cur=array[0];
for(int i=1;i<array.length;i++){
cur+=array[i];
cur=cur<array[i]?array[i]:cur;
max=Math.max(cur,max);
}
return max;
}
}
2.当要求子数组最小长度是2的时候
- 要求数组长度是2与1类似 但是需要用一个长度计数的变量
- 当长度>=2 就记录一下局部max值
public static int FindGreatestSumOfSubArray(int[] array) {
int max=Integer.MIN_VALUE;
int cur=array[0];
int count=1;
for(int i=1;i<array.length;i++){
cur+=array[i];
count++;
if(count>1){
max=Math.max(cur,max);
}
if(cur<array[i]){
cur=array[i];
count=1;
}
}
return max;
}