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;

}
};
相关推荐
Hua-Jay7 小时前
OpenCV联合C++/Qt 学习笔记(十九)----图像分割
c++·笔记·qt·opencv·学习
kyle~7 小时前
调试器---GDB(Linux/Unix平台下编译型语言,C++、Go、Rust)
linux·c++·unix
爱炼丹的James7 小时前
第二章 数据结构
数据结构
宏笋7 小时前
C++ string 和string_view的区别和用法
c++
宏笋7 小时前
C++ 回调函数详解和常用场景
开发语言·c++
WBluuue7 小时前
Codeforces 1095 Div2(ABCDE)
c++·算法
IT当时语_青山师__JAVA技术栈7 小时前
数组与链表深度解析:从内存布局到工业级实践
java·算法·面试
吃着火锅x唱着歌7 小时前
LeetCode 496.下一个更大元素I
算法·leetcode·职场和发展
咩咦7 小时前
C++学习笔记07:引用做返回值
c++·学习笔记·引用·static·引用返回
郭涤生7 小时前
C++ 20联合体(Union)
开发语言·c++