2022.04.12(LC_53_最大子数组和)

阅读 94

2022-04-14

 方法:贪心

class Solution {
    public int maxSubArray(int[] nums) {
        int n = nums.length;
        if (n == 1) return nums[0];
        int ans = Integer.MIN_VALUE;
        int sum = 0;
        //贪心的地方:如果 -2 1 在一起,计算起点的时候,一定是从1开始计算,
        //因为负数只会拉低总和,这就是贪心贪的地方
        for (int i = 0; i < n; i++) {
            sum += nums[i];
            //取区间累计的最大值(相当于不断确定区间终止位置)
            ans = Math.max(ans, sum);
            //当前连续和为负数的时候立刻放弃,从下一个元素重新计算连续和,
            //因为负数加上下一个元素,连续和只会越来越小,
            //从而不断调整最大子数组和区间的起始位置
            if (sum < 0) {
                sum = 0;
            }
        }
        return ans;
    }
}

精彩评论(0)

0 0 举报