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.
这个题还是不太好想的。对于全为负数的情况,我们只要找到最大的元素即可。其他情况,对于题目中的数组,当添加第k+1个元素到字串中时,我们要判断与其相邻的之前元素的最大和,如果是小于零的数,说明对添加第k+1个元素是没有帮助的。我们便把之前元素的和置为0,即0+nums[k+1]。以此类推,便可以在线性时间内找到和最大的子串。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum=0;
int tmp=0;
int maxnum=nums[0];
for(int i=1;i<nums.size();i++){//处理全为负数的情况
if(nums[i]>maxnum)
maxnum=nums[i];
}
if(maxnum<0)
return maxnum;
for(int i=0;i<nums.size();i++){
if(tmp<0)
tmp=0;
tmp=tmp+nums[i];
sum=max(tmp,sum);
}
return sum;
}
};