Kadane算法用于解决连续子数组最大和问题,我们用ci来表示数组a[0...i]的最大和。
观察可以发现当ci-1 < 0时,ci = ai。用e表示以当前为结束的子数组的最大和,以替代数组c;那么: e = max(e,e+ai)。
//int [] arr = new int [size]
public int kadane(int [] arr){
int max_ending_here = arr[0];
int max_so_far = arr[0];
for(int i = 0; i < arr.length; i++){
max_ending_here = Math.max(arr[i],arr[i]+max_ending_here);
max_so_far = Math.max(max_so_far,max_ending_here);
}
return max_so_far;
}