[leetcode]53. Maximum Subarray
Analysis
内心毫无波动 —— [ 小声逼逼 ]
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
题目意思很简单,就是找到数组中和最大的子串,然后把和输出就行了。
其实这题偷偷看了大佬们的解答0。0所以就解释一下代码吧~
前面都很好理解,直到:
if(sum<0)
sum = 0;
这个是要反向理解的(突然想到韦神当年反向Q),当你遍历到第i个数字的时候,你要判断的是要不要把这个数字加入到和最大子串中,那么反过来想,如果这个最大子串的leader是你遍历的第i个数字呢?也就是说当你遍历了前i-1个数字,然后找到了一个最大和sum,那么如果这个sum大于0的话,对于第i个数字(也就是leader)来说前面的sum是可以带来收益的,但是如果sum小于0,那么前面的sum就不能带来收益,所以当sum小于0的时候就放弃,重新让sum等于0,然后重新找。
Implement
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum = 0;
int max = nums[0];
for(int i=0; i<nums.size(); i++){
sum += nums[i];
if(sum>max)
max = sum;
if(sum<0)
sum = 0;
}
return max;
}
};