题目
分析
直接暴力,枚举每个起始点的最大和
代码
1 class Solution { 2 public: 3 int maxSubArray(vector<int>& nums) { 4 int res = INT_MIN; 5 for(int i = 0;i < nums.size();i++){ 6 int count = 0; 7 for(int j = i ;j <nums.size();j++){ 8 count += nums[j]; 9 res = max(count,res); 10 } 11 } 12 return res; 13 14 } 15 };
分析(贪心)
贪心要考虑局部最优。res = res + cur ,如果之前计算的总和为负数,那加上当前元素一定会比当前元素小。当前元素为正数,res < cur ,当前元素为负数,依旧 res < cur 。所以如果之前计算总和为负数,它的作用只会降低总和。故当前和为负数,直接从下一个元素开始就好了。并且要实时存放连续子序列和的最大值。
代码
1 class Solution { 2 public: 3 int maxSubArray(vector<int>& nums) { 4 int res = INT_MIN; 5 int count = 0; 6 for(int i = 0;i < nums.size();i++){ 7 count += nums[i]; 8 if(count > res) res = count; 9 if(count < 0) count= 0; 10 } 11 return res; 12 13 } 14 };