LeetCode题解——最大子序和
- 题目介绍
- 解题思路
- 这道题其实也是一个动态规划题,我们先来想一个问题以下标i结尾的最大连续子数组的和sum[i]是多少?
- 是不是以i-1结尾的sum[i-1]+num[i],只要sum[i-1]是正的那么sum[i]肯定就是最大值了,所以我们可以得出一个结论sum[i] = sum[i-1]>0?sum[i-1]+num[i]:num[i]
- 那么我们是不是同理可以分别求出以0,1,2,3,4....len结尾的最大连续子数组的和?那么我们从中取一个最大值就是我们这个题目想要的答案了。
- 代码示例
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size();
vector<int> sums(len,0); //用来保存到index为止的最大值
sums[0] = nums[0];
int max = sums[0];
for(int i = 1; i < len; i++) {
if(sums[i-1] > 0) {
sums[i] = sums[i-1] + nums[i];
}else{
sums[i] = nums[i];
}
}
for(auto & x:sums){
max = max>=x?max:x;
}
return max;
}
};