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。

相关推荐
ゞ 正在缓冲99%…3 分钟前
2025.9.24华为软开
java·算法·华为
Dev7z7 分钟前
基于MATLAB实现SVM和集成特征的水稻病害图像识别系统
算法·机器学习·支持向量机
AI科技星8 分钟前
时空的几何之歌:论统一场论动量公式 P = m(C - V) 的完备重构、量化哲学诠释与终极验证
数据结构·人工智能·算法·机器学习·计算机视觉·重构
大千AI助手11 分钟前
基于实例的学习:最近邻算法及其现代演进
人工智能·算法·机器学习·近邻算法·knn·大千ai助手·基于实例的学习
程序员-King.17 分钟前
day108—同向双指针—乘积小于K的子数组(LeetCode-713)
算法·leetcode·双指针
程序员-King.22 分钟前
day106—双指针—长度最小的子数组(LeetCode-209)
算法·贪心算法
麒qiqi24 分钟前
【数据结构详解】栈与队列的核心原理、实现及应用场景
数据结构
Xの哲學28 分钟前
Linux TTY子系统深度剖析
linux·服务器·算法·架构·边缘计算
烟囱土著29 分钟前
捣鼓30天,我写了一个数学加减练习小程序
学习·算法·微信小程序·小程序
AndrewHZ34 分钟前
【图像处理基石】如何用OpenCV入门计算机视觉?
图像处理·深度学习·opencv·算法·计算机视觉·机器视觉·cv