LeetCode 53: 最大子序和

动态规划解法一

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int s = nums.size();
        if (s == 1) {
            return nums[0];
        }
        int mmax = nums[0];
        for (int i = 1; i < s; i++) {
            nums[i] = max(nums[i-1]+nums[i], nums[i]);
            mmax = max(nums[i], mmax);
        }
        return mmax;
    }
};

LeetCode 53: 最大子序和

贪心解法二

一定要意识到一点,只要连续的几个数加起来是负数,那么它再加上一个数的值一定会比它本身小。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int s = nums.size(), sum = 0, mmax = nums[0];
        for (int i = 0; i < s; i++) {
            sum += nums[i];
            mmax = max(sum, mmax);
            if (sum < 0) {
                sum = 0;
            }
        }
        return mmax;
    }
};

LeetCode 53: 最大子序和

上一篇:53、最大子数组和


下一篇:剑指 Offer 53 - II. 0~n-1中缺失的数字