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;

}
};
相关推荐
涛ing20 分钟前
【Ubuntu 上搭建 Nginx-RTMP 服务】
linux·服务器·c++·nginx·ubuntu·ffmpeg·音视频
pzx_00124 分钟前
【集成学习】Boosting算法详解
人工智能·python·深度学习·算法·机器学习·集成学习·boosting
倔强的石头10636 分钟前
【C++经典例题】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句
开发语言·c++
Channing Lewis40 分钟前
经典编程题:服务器广播
python·算法
Ritsu栗子1 小时前
代码随想录算法训练营day27
c++·算法
小冯的编程学习之路1 小时前
【LeetCode】:稀疏相似度【困难】
c++·算法·leetcode
羊小猪~~1 小时前
C/C++语言基础--C++STL库算法记录(质变算法、非质变算法、查找、排序、排列组合、关系算法、集合算法、堆算法等)
c语言·开发语言·数据结构·c++·算法·stl
qystca1 小时前
炸弹 (boom.c)(100分双端递推+分割线优化)
算法
程序员老冯头1 小时前
第三十六章 C++ 多线程
java·c++·信号处理
weixin_749949902 小时前
双向列表的实现(C++)
开发语言·c++·链表