【LeetCode】53. 最大子数组和

刚开始拿到题目,没有什么想法。但是开始分析起来的时候,就立马有思路了。

1. 题目

2. 思路

dp[i] 表示以nums[i]结尾时可以得到的最大子数组和。有了这个假设之后,题目就豁然开朗了。那么dp[i]只有两种情况可以分析:dp[i-1]>0dp[i-1] <0。这两种情况下,分别对应不同的操作:

python 复制代码
if dp[i-1] > 0 : # 之前的子数组和大于0,那么可以利用这段和
	dp[i] = dp[i-1] + nums[i] 
else :# 之前的子数组和小于等于0,不可以累加(因为累加会变得更小)。
	dp[i] = nums[i] 

3. 代码

python 复制代码
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        dp = [0] * len(nums)
        res = nums[0]
        for i in range(len(nums)):
            if i == 0:
                dp[i] = nums[i]
            else:
                if dp[i-1] > 0:
                    dp[i] = dp[i-1] + nums[i]
                else:
                    dp[i] = nums[i]
            res = max(res, dp[i])
        return res
相关推荐
技术小黑15 小时前
CNN算法实战系列03 | DenseNet121算法实战与解析
pytorch·深度学习·算法·cnn
wearegogog12315 小时前
三电平SVPWM逆变器仿真指南
单片机·算法
笨笨饿16 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
pkowner16 小时前
若依分页问题及解决方法
java·前端·算法
呃呃本17 小时前
算法题(栈)
算法
通信小呆呆17 小时前
基于 ADMM-MFOCUSS 的捷变频雷达扩展目标稀疏重构原理
算法·重构·信息与通信·信号处理·雷达
橙淮17 小时前
Java数组与链表:特性对比与应用场景
数据结构·算法
炽烈小老头17 小时前
【每天学习一点算法 2026/05/15】被围绕的区域
学习·算法·深度优先
芜湖xin17 小时前
【题解-洛谷】P1012 [NOIP 1998 提高组] 拼数
算法·贪心
xiaoxiaoxiaolll18 小时前
金属结构疲劳寿命预测与健康监测技术
人工智能·算法·机器学习