力扣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;
    }
};
相关推荐
jarvisuni29 分钟前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu41 分钟前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_7981 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭1 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶1 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶1 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z2 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法
hans汉斯2 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频
一次旅行3 小时前
AutoAWQ完整实战:MIT激活感知AWQ量化,模型显存减半、推理提速且精度无损
人工智能·python·算法
GrowthDiary0073 小时前
算法题:寻找二维数组top k问题
数据结构·python·算法