力扣53. 最大子数组和(动态规划)

Problem: 53. 最大子数组和

文章目录

题目描述

思路及解法

1.定义dp数组:dpi表示以numsi为结尾的子序列的最大子序列和;

2.状态初始化:dp0 = nums0,表示以nums0为结尾的子序列的最大子序列和为nums0本身;

3.状态转移:注意上述定义的dp表示的实际意义是numsi为结尾的子序列的最大子序列和 ;若当前已经得到dpi-1,则对于dpi我们要么在dpi-1的基础上再选择讲numsi加进来组成一个以numsi为结尾的最大子序列,要么直接选择numsi;所以直接在二者中选择一个较大的赋值给dpi即可

4.计算结果:在dp数组中选出最大的值返回即可;

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为原数组 n u m s nums nums的大小

空间复杂度:

O ( 1 ) O(1) O(1)

Code

cpp 复制代码
class Solution {
public:
    /**
     * Dynamic programing
     * @param nums Given arr
     * @return int
     */
    int maxSubArray(vector<int>& nums) {
        int n = nums.size();
        vector<int> dp(n + 1);
        dp[0] = nums[0];
        for (int i = 1; i < n; ++i) {
            dp[i] = max(dp[i - 1] + nums[i], nums[i]);
        }
        int max = INT_MIN;
        for (int i = 0; i < n; ++i) {
            if (dp[i] > max) {
                max = dp[i];
            } 
        }
        return max;
    }
};
相关推荐
秋天的怀念_David18 小时前
算法一千零一夜 · 作品相关:版权与致谢声明
程序人生·算法·学习方法
揽星河..19 小时前
【C语言】数组
c语言·开发语言·算法
careathers19 小时前
【数据结构】基于比较的排序算法 - 选择排序
数据结构·算法·排序算法
听风若依19 小时前
C++模板初阶
c++·算法
纪念 22920 小时前
C++ 算法(模拟)
开发语言·c++·算法
揽星河..20 小时前
【C语言】函数
c语言·算法
zwc321043205520 小时前
Day 2:图像内存、数据类型与stride
c++·人工智能·opencv·算法·计算机视觉
重生之小比特20 小时前
【算法拾光】模拟|提莫攻击 + N 字形变换
算法·模拟
東隅已逝,桑榆非晚20 小时前
AVL数实现
c++·笔记·学习·算法
驭渊的小故事21 小时前
LeetCode 算法题解:滑动窗口与数组合并的实战应用
算法·leetcode·职场和发展