题意: 从一个数组中找到一个连续的子数组,使和最大。
举例: 给定一个数组[-2, 1, -3, 4, -1, 2, 1, -5, 4],连续的子数组[4, -1, 2, 1]有最大的和为6。
分析: 本题采用贪心求解,设置变量 sum 和 max , sum 表示子数组和,初始值为0; max 表示最大的和,初始值为 array[0] 。从位置0开始,遍历到i位置,如果 sum[0...i]<0 ,则丢弃前面i+1个, sum=0 , max 是 sum[0...i] 中的最大值 max=sum[0...j](0≤j≤i) ,从位置i+1开始重新执行,直到数组遍历结束。
代码
public int maxSubArray(int[] A){
if(A == null){
return 0;
}else if(A.length == 1){
return A[0];
}else{
int sum = 0; int max = A[0];
int i = 0;
while(i < A.length){
sum += A[i];
max = max > sum ? max : sum;
if(sum < 0){
sum = 0;
}
i++;
}
return max;
}
}