LeetCode-53 最大子序和

LeetCode-53 最大子序和

1.暴力求解

​ 遍历数组。分别求出每个子序列的和,再求最大值。

​ Time Limit Exceeded

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

2. 动态规划

​ 对于元素i,,以i为结尾的最大子序和,只取决于前(i-1)个元素中,以[i-1]号元素为结尾的最大子序和

​ 对于前i-1个元素的子序和,存在两种情况

  1. 前i-1个元素最大子序和大于0,则前i个元素的最大子序等于 前i-1元素最大子序和+当前元素

  2. 前i-1个元素最大子序和小于0,则前i个元素的最大子序等于 元素

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        sum_n_1=nums[0]
        sum=nums[0]
        for i in range(1,len(nums)):
            if sum_n_1>0:
                sum_n_1+=nums[i]
            else:
                sum_n_1=nums[i]
            if sum_n_1>sum:
                sum=sum_n_1
        return sum
posted @ 2021-10-16 10:31  流光之中  阅读(25)  评论(0编辑  收藏  举报