【题目】
给定一个数组arr,返回子数组中的最大累加和。
例如,arr[1,-2,3,5,-2,6,-1],其中子数组[3,5,-2,6]累加和最大为12,故返回12.
【要求】
时间复杂度为O(N),额外空间复杂度为O(1)
【代码】
public static void main(String[] args) {
int[] res={1,-2,3,5,-2,6,-1};
int r=maxSon1(res);
System.out.println(r);
}
//子数组的最大累加和问题
public static int maxSon(int[] arr){
if(arr==null||arr.length==0){
return 0;
}
int maxRes=Integer.MIN_VALUE;
for(int i=0;i<arr.length;i++){
int temp=arr[i];
for(int j=i+1;j<arr.length;j++){
maxRes=Math.max(maxRes, temp+=arr[j]);
}
}
return maxRes;
}
public static int maxSon1(int[] arr){
if(arr==null||arr.length==0){
return 0;
}
int maxRes=Integer.MIN_VALUE;
int temp=0;
for(int i=0;i<arr.length;i++){
temp+=arr[i];
maxRes=Math.max(maxRes, temp);
temp=temp>0?temp:0;
//判断是否继续累加(temp<0,表示累加和为负了,应从下一个数重新累加)
}
return maxRes;
}