剑指 Offer 42. 连续子数组的最大和 + 动态规划
剑指 Offer 42. 连续子数组的最大和
题目链接
-
状态定义: 设动态规划列表 , 代表以元素 为结尾的连续子数组最大和。
-
为何定义最大和 中必须包含元素 :保证 递推到 的正确性;如果不包含 ,递推时则不满足题目的 连续子数组 要求。
-
转移方程: 若 ,说明 对 产生负贡献,即 还不如 本身大。
- 当 时:执行 ;
- 当 时:执行 ;
-
初始状态: ,即以 结尾的连续子数组最大和为 。
-
返回值: 返回 dp 列表中的最大值,代表全局最大值。
-
空间复杂度降低:
- 由于 只与 和 有关系,因此可以将原数组 用作 列表,即直接在 nums 上修改即可。
*由于省去 dp 列表使用的额外空间,因此空间复杂度从 降至 。
- 由于 只与 和 有关系,因此可以将原数组 用作 列表,即直接在 nums 上修改即可。
-
复杂度分析:
- 时间复杂度 : 线性遍历数组 nums即可获得结果,使用 时间。
- 空间复杂度 : 使用常数大小的额外空间。
package com.walegarrett.offer;
/**
* @Author WaleGarrett
* @Date 2020/12/12 8:34
*/
public class Offer_42 {
public int maxSubArray(int[] nums) {
int len = nums.length;
int sum = 0;
int maxs = -0x3f3f3f3f;
for(int i=0; i<len; i++){
sum += nums[i];
maxs = Math.max(maxs, sum);
if(sum < 0){
sum = 0;
}
}
return maxs;
}
}
Either Excellent or Rusty
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了