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;

}
};
相关推荐
kiracrimson3 分钟前
选择排序与快速排序:一次选极值,一次分区间
算法·排序算法
无名猿4 分钟前
C++ 对象内存模型:vtable 布局、多继承 vptr、RTTI 与 dynamic_cast 走查
c++·内存管理·调试技巧·现代c++
All for pursuit.22 分钟前
【动态规划-8】152.乘积最大子数组
数据结构·c++·算法·leetcode·动态规划
信奥卷王25 分钟前
[GESP202512 六级] 路径覆盖
数据结构·算法
INGNIGHT34 分钟前
1861 · 老鼠跳跃(坐标型dp)
数据结构·c++
Lazionr42 分钟前
手撕 unordered_set 和 unordered_map,剖析哈希表底层实现
c++·算法
0+1111 小时前
算法 --归并排序
数据结构·算法·排序算法
Run_Teenage1 小时前
算法:树的重心、树的直径
算法
专注仿真1 小时前
高代价计算后置:探测、交战、毁伤三条链路的统一设计哲学
算法·探测·毁伤
xie0510_1 小时前
Any类简要实现
开发语言·c++·算法