面试题31:连续子数组的最大和(Leetcode-53:Maximum Subarray)

经典DP问题,用max变量存储先前得到的子数组的和

注意四点:

1. 每次循环 sum += A[i]

2. 如果sum>max ,则将max置为sum

3. 如果sum<0,则将sum重新置0,因为如果sum<0,那么最大值的计算就要重新开始,待下一个循环再比较max和sum

4.max的初始值必须是int型的最小值,也就是Integer.MIN_VALUE,因为需要和sum比较

 public int maxSubArray(int[] A) {
        int length = A.length;
        int sum = 0;
        int max = Integer.MIN_VALUE;
        for(int i = 0;i < length;i++){
            sum += A[i];
            if(sum>max)max=sum;
            if(sum<0)sum=0;
        }
        return max;
    }



你可能感兴趣的:(剑指offer)