动态规划-剑指 Offer 42. 连续子数组的最大和

155 阅读1分钟

题目链接

DP

保存了每一num开头的最大和

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        dp = nums
        for i in range(len(nums)):
            temp = 0
            for j in range(i, len(nums)):
                temp += nums[j]
                dp[i] = max(dp[i], temp)
        return max(dp)

DP优化

本题目不需要用到之前的dp,只用nums[i]之前的dp即可,因此不必保存所有的dp状态,只记录之前状态即可

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        res = former = nums[0]
        temp = 0
        for i in range(1, len(nums)):
            if former > 0: former += nums[i]
            else: former = nums[i]
            res = max(res, former)
        return res