剑指 Offer 42. 连续子数组的最大和
方法:动态规划
解题思路
参考动态规划详细解析——剑指 Offer 42. 连续子数组的最大和
注意:
- 很多同学首先会想到同向双指针,实际上本题由于
数组的某一个元素的下一个元素可正可负,导致同向双指针要求的单调性无法满足; - 使用
解答时,关键一部在于 数组含义的定义,即 表示以 结尾的子数组和的最大值,这就保证了递推过程中前后 和 可以联系起来(若选择 则可以与 连接起来成为新的子数组)。
代码
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
int dp = nums[0], ans = nums[0];
for (int i = 1; i < n; i ++ ) {
dp = max(dp + nums[i], nums[i]);
ans = max(ans, dp);
}
return ans;
}
};
复杂度分析
时间复杂度:
空间复杂度:
分类:
leetcode题解
标签:
动态规划
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~