Leetcode53. 最大子数组和(HOT100)

链接

我的解法:

cpp 复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n = nums.size();
        int res = INT_MIN;
        vector<int> f(n+1,0);
        for(int i = 1;i<=n;i++){
            f[i] = max(f[i-1]+nums[i-1],nums[i-1]);
            res = max(res,f[i]);
        }
        return res;
    }
};

f[i]表示以nums[i]结尾的子数组的和的最大值。

对于前i个数,要求最大和,要么就是前i-1个数求出来的最大和,要么是第i个数本身就是这i个数中的最大和。


更好的解法:

cpp 复制代码
// class Solution {
// public:
//     int maxSubArray(vector<int>& nums) {
//         int res = INT_MIN;
//         for(int i = 0,last = 0;i<nums.size();i++){
//             last = max(nums[i],nums[i]+last);
//             res = max(res,last);
//         }
//         return res;

//     }
// };

空间复杂度是O(1)的,使用last来存储f[i-1],每次更新last。

相关推荐
故事和你911 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
我叫黑大帅1 小时前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头1 小时前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法
skilllite作者2 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考
网络·人工智能·算法·rust·openclaw·agentskills
破浪前行·吴3 小时前
数据结构概述
数据结构·学习
py有趣3 小时前
力扣热门100题之不同路径
算法·leetcode
_日拱一卒4 小时前
LeetCode:25K个一组翻转链表
算法·leetcode·链表
啊哦呃咦唔鱼4 小时前
LeetCodehot100-394 字符串解码
算法
小欣加油4 小时前
leetcode2078 两栋颜色不同且距离最远的房子
数据结构·c++·算法·leetcode·职场和发展
我真不是小鱼4 小时前
cpp刷题打卡记录30——轮转数组 & 螺旋矩阵 & 搜索二维矩阵II
数据结构·c++·算法·leetcode