LeetCode如何求连续子数组的最大和
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍LeetCode如何求连续子数组的最大和,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数
千家信息网最后更新 2025年12月03日LeetCode如何求连续子数组的最大和
这篇文章主要介绍LeetCode如何求连续子数组的最大和,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
题目描述
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为 O(n)。
1 <= arr.length <= 10^5 -100 <= arr[i] <= 100
题目样例
示例
输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
题目思考
如何记录最大和? 可以不使用额外空间吗?
解决方案
思路
题目要求复杂度 O(N), 那么我们就不能使用暴力两重循环求当前前缀和的方法了, 那样的复杂度是 O(N^2) 那如何做到一次遍历就计算出结果呢? 假设当前以 i 结尾的最大和是 sm, 那么到 i+1 的时候, 以它结尾的最大和可以有两种选择: 在 sm 的基础上加上 i+1 的值 也可以另起炉灶, 从 i+1 开始计算 (对应的是 sm < 0的情况)也即 i+1 结尾的最大和就是 max(sm+arr[i+1], arr[i+1])它就是新的 sm 值, 这样就不需要额外的空间 而最终的结果自然就是 max(以各个下标结尾的最大和), 可以在遍历的时候顺带一起判断以上就是典型的动态规划的思想, 利用前面的计算结果来推导出当前的结果 下面的代码对必要步骤有详细的解释, 方便大家理解
复杂度
时间复杂度 O(N)只需要遍历整个数组一遍 空间复杂度 O(1)不需要额外空间
代码
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
# 初始化最终结果为负无穷, 因为可能数组全部都是负数
res = -float('inf')
# 初始化和为0
sm = 0
for x in nums:
# 计算当前结尾的最大值
sm = max(sm + x, x)
# 更新最终结果为当前最大的最大值
res = max(res, sm)
return res
以上是"LeetCode如何求连续子数组的最大和"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
最大
数组
复杂
复杂度
结果
就是
空间
题目
最大值
代码
内容
时候
时间
篇文章
负数
解释
输入
必要
另起炉灶
下标
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术免费视频下载
项目网络安全方案
云南平讯科技互联网设计
影响网络安全主要因素
河南嵌入式软件开发哪家便宜
九曳供应链软件开发咋样
服务器可以用360补漏洞吗
浙江通信网络安全防护服务团队
特需体检数据库连接失败
一款叫数据库的微信软件
数据库字符串连接
中国刺道网络安全协会
苹果服务器一直无法连接
数据库切换日期
傲来网络安全黑板报
腾讯云企业服务器优惠
市电电压不稳对服务器有影响吗
钢铁企业软件开发
腾讯轻量应用服务器带宽
设置千兆服务器为百兆
亲爱的热爱的为什么是网络安全
bim数据库申请
asp网站后台数据库
瓷砖软件开发定制
数据库字符串连接
网络技术职业生涯人物访谈
备份差异数据库
brdf数据库
敦煌服务器
华为服务器连接管理口