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;

}
};
相关推荐
半壶清水11 分钟前
[软考网规考点笔记]-操作系统核心知识及历年真题解析
网络·网络协议·算法
Tansmjs25 分钟前
实时数据可视化库
开发语言·c++·算法
WBluuue27 分钟前
Codeforces 1075 Div2(ABC1C2D1D2)
c++·算法
圣保罗的大教堂28 分钟前
leetcode 3650. 边反转的最小路径总成本 中等
leetcode
添砖java‘’31 分钟前
线程的互斥与同步
linux·c++·操作系统·线程·信息与通信
2401_838472511 小时前
C++模拟器开发实践
开发语言·c++·算法
3108748761 小时前
0005.C/C++学习笔记5
c语言·c++·学习
s1hiyu1 小时前
实时控制系统验证
开发语言·c++·算法
daad7771 小时前
V4L2_mipi-csi
算法
楼田莉子1 小时前
C++现代特性学习:C++14
开发语言·c++·学习·visual studio