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。

相关推荐
PyHaVolask20 分钟前
数据结构与算法分析
数据结构·算法·图论
小王C语言20 分钟前
封装红黑树实现mymap和myset
linux·服务器·算法
幸运小圣28 分钟前
Set数据结构【ES6】
javascript·数据结构·es6
大佬,救命!!!39 分钟前
算法实现迭代2_堆排序
数据结构·python·算法·学习笔记·堆排序
Dream it possible!1 小时前
LeetCode 面试经典 150_栈_简化路径(53_71_C++_中等)(栈+stringstream)
c++·leetcode·面试·
程序员阿鹏1 小时前
49.字母异位词分组
java·开发语言·leetcode
天桥下的卖艺者1 小时前
R语言手搓一个计算生存分析C指数(C-index)的函数算法
c语言·算法·r语言
Espresso Macchiato1 小时前
Leetcode 3715. Sum of Perfect Square Ancestors
算法·leetcode·职场和发展·leetcode hard·树的遍历·leetcode 3715·leetcode周赛471
草莓熊Lotso2 小时前
《C++ Stack 与 Queue 完全使用指南:基础操作 + 经典场景 + 实战习题》
开发语言·c++·算法
敲上瘾2 小时前
单序列和双序列问题——动态规划
c++·算法·动态规划