您的位置:首页 > 其它

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

2017-12-05 19:59 666 查看

解题思路

如果用简单的解法,那只需要遍历两次,时间复杂度取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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: