力扣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;
    }
};
相关推荐
luj_176814 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
mCell15 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
KaMeidebaby16 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_176817 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
tmlx3I08117 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-17 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~17 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa05103018 小时前
【板子】ST表
c++·笔记·算法·板子
CHHH_HHH18 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
hurrycry_小亦18 小时前
洛谷题目:P1215 [USACO1.4] 母亲的牛奶 Mother‘s Milk 题解(本题简)
算法