题目
求一个数组的最大连续子数组和
要求:时间复杂度o(n)
思路
例如 1,-2,3,-2,4,-2 最大子数组的和是5(3,-2,4)
max保留曾经的最大连续子数组和,real保留真实相加的和
int max=Integer.MIN_VALUE,real=0;
第一个数1
max = 1,real=1
第二个数-2
max = 1,real=-1
此时real= -1,可以抛弃1和-2了,重置real=0
即 max = 1,real=0
第三个数3
max = 1,real=3
此时real>max max=real
即max =3 ,real =3
第四个数-2
max=3,real=1
第五个数4
max=3,real=5
此时real>max max=real
即max =5 ,real =5
第六个数-2
max=5,real=3
retrun max;
public static int maxSubArraySum(int[] arr){
if(null==arr||arr.length==0)return 0;
int max = Integer.MIN_VALUE , real = 0;
for(int i=0;i<arr.length;i++){
real+=arr[i];
if(real>max){
max = real;
}
if(real<0)real = 0;
}
return max;
}