Leetcode刷题记录——53. 最大子序和

在这里插入图片描述

待补充:
分治法

我实现的方法 复杂度为O(n)的动态规划算法
其中,值得注意的是,
子问题f(i)的定义为以第i个数字(a[i])为结尾的最大和连续子数组的和
由于这个数组一定与a[i-1]连续,则也一定与以a[i-1]为结尾的最大和连续子数组相邻
因此 状态转移方程满足
f(i) = f(i-1) + a[i] if f(i-1) > 0 else a[i],i>=1

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        if nums == []:
            return 0
        length = len(nums)
        if length == 1:
            return nums[0]
        #本解法中,动态规划的状态转移方程f(i)
        #代表以a(i)为结尾的最大和连续子数组
        res = nums[0]
        maxa = res
        for i in range(length-1):
            tempindex = i + 1#nums[tempindex]代表新考察的数字
            if res >= 0:
                res += nums[tempindex]
            elif res < 0:
                res = nums[tempindex]
            if res > maxa:
                maxa = res
            

        return maxa
发布了43 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41545780/article/details/105054438
今日推荐