0
点赞
收藏
分享

微信扫一扫

2022.04.12(LC_53_最大子数组和)

止止_8fc8 2022-04-14 阅读 94
java

 方法:贪心

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 条评论