1、用动态规划的思想,如果之前的sum>=0,那么之前的sum可以加到a[i]上,如果之前的sum<0,那么没必要把之前的sum加上来,令sum=a[i]即可。
2、自己想了一个是因为max_sum的左右肯定都是正数,那么只需要考虑正数就可以了,从第一个正数加到第二个、第三个……再从第二个正数加……不过这样很慢就是了。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum=INT_MIN;
int max_num=INT_MIN;
for(int i=0;i<nums.size();i++){
if(sum>=0) sum+=nums[i];
else sum=nums[i];
if(sum>max_num) max_num=sum;
}
return max_num;
}
};