53. Maximum Subarray Easy

这是一道关于动态规划的简单题,求和最大的子串。我们使用一维数组sun[i]来表示,以i结尾的子串的和最大值,当i=0时,sum[0]肯定是nums[0],当i大于0时,状态转移方程为:sum[i] = sum[i - 1] > 0? sum[i - 1] + nums[i]: nums[i]; 解释:以i结尾的最大子串和,看前一个子串和是正还是负,如果是正,无论第i个数是正还是负,都要加上前面的子串的和,这样才是最大和(因为加正数肯定值变大),如果前一个子串和是负,sun[i]就是nums[i]这个数。
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int sum[nums.size()];
        int max;
        for (int i = 0; i < nums.size(); ++i)
        {
        	if(i == 0){sum[i] = nums[i]; max = sum[i];}
        	else {
        		sum[i] = sum[i - 1] > 0 ? sum[i - 1] + nums[i]: nums[i];
        		if(sum[i] > max) max = sum[i];
        	}
        }
        return max;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值