53.Maximum Subarray

 

 

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        n = len(nums)
        res = float('-inf')
        tmp = 0
        for i in range(n):
            if tmp < 0:
                tmp = 0
            tmp = tmp + nums[i]
            res = max(tmp, res)
        return res
        

 

 

 

 

Java 版:

  • 动态规划,时间复制度 O(n);
  • 因为正数 preSum 与 X 相加,才会大于 X,相当于正反馈,则累加 X,继续滚雪球;
  • 否则,负数与 X 相加,负反馈,相加后比 X 本身的值还要小,则重新开始累加;

class Solution {
    public int maxSubArray(int[] nums) {
        int preSum = nums[0], res = preSum; // preSum为前面最大子序列的和
        for(int i = 1; i < nums.length; i++){
            if(preSum < 0) preSum = nums[i]; //前面最大的和小于 0,则重新开始累加
            else preSum += nums[i]; //否则,继续保持累加
            res = preSum > res ? preSum : res; //每一次都要比较最大的结果
        }
        return res;
    }
}

 

posted @ 2020-05-09 15:15  星海寻梦233  阅读(112)  评论(0编辑  收藏  举报