原题:
解法:
首先是最大值的定义。INT_MIN这个是默认的,INT_MAX整形的最大值;
利用贪心的思想求解这道题,其时间复杂度会控制在O(N)。**所谓贪心,就是只管当前能够得到的最大值,别的事情都不管。**因为求的是最大连续子列和,那么当前几个数字相加得到的结果比初始最大值要大的时候,那么就更新,如果前面的数字小于零,那么直接讲求得的和重置为0,重新开始即可。
有很多人提到了动态规划或者暴力的解法,可能容易想到但不容易操作,如果限定了时间,暴力在数据规模很大的时候会超时。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size();
int ans = 0, max_ = INT_MIN;
for(int i=0; i<len; i++)
{
ans += nums[i];
max_ = max(ans, max_);
if(ans < 0)
ans = 0;
}
return max_;
}
};