Leetcode解题笔记 53. Maximum Subarray [Easy] 动态规划

版权声明:自由转载-非商用-非衍生-保持署名 https://blog.csdn.net/mgsweet/article/details/78724185

解题思路

如果用简单的解法,那只需要遍历两次,时间复杂度取O(N^2)即可,但如果想将时间复杂度降低到线性,那需要用到动态规划的方法。具体看算法解释部分

算法解释

设preSub[i]为在index i前(包括字符i)的连续子串最大和,则preSub[i] = max{preSub[i - 1] + nums[i], nums[i]}, preSub[nums.size() - 1]即为所求。

代码

class Solution {
public:
    const int MAX_N = 1000;
    int maxSubArray(vector<int>& nums) {
    int maxSub = nums[0];
    int preSub = nums[0];
    for (int i = 1; i < nums.size(); i++) {
        if (preSub + nums[i] >= 0) {
            preSub = max(preSub + nums[i], nums[i]);
            maxSub = max(preSub, maxSub);
        } else {
            preSub = nums[i];
            maxSub = max(preSub, maxSub);
        }
    }
    return maxSub;
}
};

猜你喜欢

转载自blog.csdn.net/mgsweet/article/details/78724185