连续子数组的最大和,方法多种,要求是时间复杂度为O(n),
利用:a为负数的话,a+b<b的思想。将当前累加和sum当成a,如果sum为负数,则忽略掉之前的累加,将sum设置成当前数(sum=array[i])。
public class SubArrayMaxSum {
public static void main(String[] args){
// int[] array = {1,2,-1,-3,4};
int[] array = {-1,-1,-1};
int sum = findMaxSum(array);
System.out.println(sum);
}
private static int findMaxSum(int[] array) {
if(array==null||array.length==0){
throw new RuntimeErrorException(null, "数组为空");
}
int sum = array[0];
int maxSum = array[0];
if(array.length==1){
return sum;
}
for (int i = 1; i < array.length; i++) {
if(sum<0){
sum = array[i];
}else {
sum+=array[i];
}
if(sum>maxSum){
maxSum=sum;
}
}
return maxSum;
}
}