最大子数组和

问题描述与解题思路

题目链接
在这里插入图片描述

确定本题的状态表示

dp[i]表示的是以i位置元素为结尾的所有nums子数组中的最大和(每一个以i位置元素为结尾的nums子数组,其所有元素加起来都有一个和,我们要求的就是最大的那个和)
在这里插入图片描述

确定本题的状态转移方程

在这里插入图片描述

返回值

这个题和其他的题普通的地方在于其他题我们一般都是返回这个动态规划结束的时候返回它最后的那个元素。就是我们要的结果,但是因为这个题我们状态表示的定义比较特殊,dp[n]代表的含义是以最后一个元素为结尾的所有子数组中的最大和,他并不是我们题目要的那个最大的和,因此我们不能直接返回dp[n],而是应该遍历dp数组,找出其中最大的元素返回

代码实现

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n=nums.size();
        vector<int> dp(n+1,0);
        int ret=0xc1c1c1c1;
        for(int i=1;i<=n;i++){
            dp[i]=max(dp[i-1]+nums[i-1],nums[i-1]);
            if(dp[i]>ret) ret=dp[i];
        }
        return ret;
    }
};
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值