力扣 53. 最大子数组和

题目来源:https://leetcode.cn/problems/maximum-subarray/description/

力扣 53. 最大子数组和_第1张图片

 C++题解(来源代码随想录):难点在于判断什么时候更新count。

是当nums[i]为正数吗?那要nums没有正数怎么办;

是当nums[i]比之前子数组和大吗?对于[8,-19,5,-4,20] 在5的位置就不会被更新,所以找不到正确值21;

所以,是在之前子数组和小于0处更新!之前的子数组和小于0就没必要再用了,加啥都会拖累新的和;大于0的话,如果递增是会被记录更新的。

力扣 53. 最大子数组和_第2张图片 

class Solution {
public:
    int maxSubArray(vector& nums) {
        int result = INT32_MIN;
        int count = 0;
        for (int i = 0; i < nums.size(); i++) {
            count += nums[i];
            if (count > result) { // 取区间累计的最大值(相当于不断确定最大子序终止位置)
                result = count;
            }
            if (count <= 0) count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
        }
        return result;
    }
};

你可能感兴趣的:(开始C++吧,leetcode,算法,c++,贪心算法)