Skip to content

Latest commit

 

History

History
25 lines (22 loc) · 873 Bytes

53. Maximum Subarray.md

File metadata and controls

25 lines (22 loc) · 873 Bytes

思路

就是一个简单的动态规划。从前往后遍历一遍,用currsum记录以当前位置为结尾的最大子序列和。可见currsum要么等于nums[i]本身,要么等于nums[i]加上上一个currsum,即更新准则为:

  • 如果currsum大于0,那么currsum += nums[i]
  • 否则,则currsum = nums[i]

时间复杂度O(n),空间复杂度O(1)

C++

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int maxsum = nums[0]; // at least one number
        int currsum = nums[0];
        for(int i = 1; i < nums.size(); i++){
            if(currsum > 0) currsum += nums[i];
            else currsum = nums[i];
            
            if(currsum > maxsum) maxsum = currsum;
        }
        return maxsum;
    }
};