53. 最大子数组和
-
解题思路
- 最大子数组问题,有两个基本的想法,以i开头的子数组结果是怎样的,求出所有的结果,最优的那个,就是答案;以i结尾的子数组结果是怎样的,求出所有的结果,最优的那个,就是答案。
- 本题我们可以考虑,「以i结尾的结果是怎样的」,为啥?因为我们要求的是最大的累加和,我们求出了
res1=「以i结尾的结果」
,求i+1的结果就很方便了,如果res1为正数,则i+1的结果就是res1 + nums[i + 1]
,如果res1为负数,则i+1的结果就是nums[i + 1]
-
代码
class Solution { public: int maxSubArray(vector<int>& nums) { int n = nums.size(); int pre = nums[0]; // 0结尾的结果 int ans = pre; for (int i = 1; i < n; ++i) { // 我们现在求以i结尾的结果是多少 if (pre > 0) { // 如果前面的累加和大于0 则加上 pre += nums[i]; } else { // 否则不加 pre = nums[i]; } ans = max(ans, pre); // 更新结果 } return ans; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理