leetcode 53. 最大子数组和

题目如下

数据范围

复制代码
法一
暴力解法: 生成前缀和数组用于迅速判断得到从i到j的子数组和。
时间复杂度O(n方)因为数组很大这个解法虽然可以但是容易超时。
法二
令f(n)是以n为结尾的最大子数组和,其中f(n) = max(f(n - 1) + nums[n],f(n))
很容易想到设置一个数组用于存储每个f(i)但是我们每次循环只需要使用上一个值所以可以用pre变量来节省内存。

通过代码

cpp 复制代码
class Solution {
public:
  int maxSubArray(vector<int>& nums) {
        int sum = nums[0];int pre = 0;
        for(const auto &n:nums) {
                pre = max(pre + n,n);
                sum = max(pre,sum);
        }
    return sum;

}
};
相关推荐
末央&12 分钟前
【C++】特化妙技与分文件编写 “雷区”
开发语言·c++·算法
ShiinaMashirol25 分钟前
代码随想录刷题|Day20(组合总数,组合总数2、分割回文串)
java·算法
程序员爱钓鱼28 分钟前
用 Go 实现一个轻量级并发任务调度器(支持限速)
后端·算法·go
学习编程的gas35 分钟前
数据结构——八大排序算法
数据结构·算法·排序算法
暖阳华笺1 小时前
Leetcode刷题 由浅入深之哈希表——242. 有效的字母异位词
数据结构·c++·算法·leetcode·哈希表
啊我不会诶1 小时前
【天梯赛练习】L2-035 完全二叉树的层序遍历
算法·深度优先
Smark.1 小时前
数据结构之BFS广度优先算法(腐烂的苹果)
数据结构·算法·宽度优先
小咖拉眯1 小时前
L2-033 简单计算器满分笔记
笔记·算法
敲上瘾1 小时前
线程池的封装(c/c++)
linux·服务器·c++·算法·缓存·池化技术
代码程序猿RIP2 小时前
C++(22)—内存管理
开发语言·数据结构·c++·算法