Maximum Subarray
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
.
最大子序列,还是直接上代码吧,有点描述不清
class Solution { public: int maxSubArray(vector<int>& nums) { int res = INT_MIN, sum = 0; for(auto n:nums) { sum += n; res = max(res, sum); if(sum < 0) { sum = 0;//这个判断可以改成sum = max(sum, 0); } } return res; } };
再贴一个参考discuss的更简单的方法:
1 class Solution { 2 public: 3 int maxSubArray(vector<int>& nums) { 4 5 int n = nums.size(); 6 7 int preMax = nums[0], curMax = nums[0]; 8 9 for(int i = 1; i < n; ++i) 10 { 11 preMax = max(preMax + nums[i], nums[i]); 12 curMax = max(curMax, preMax); 13 } 14 15 return curMax; 16 } 17 };