力扣第53题

创建三个变量:presum;nowsum;maxsum;

presum表示遍历到当前元素之前的“相对大的”和;

nowsum表示遍历到当前元素时的和(presum加上nums[i]的和);

maxsum表示输出的最大和;

for对每个元素挨个遍历

如果presum前面元素的和小于0,说明前面的和应该舍去,加到后面只会减小最大和,此时最大和应该从当前元素开始算,maxsum,nowsum,presum都从该元素开始重新算,maxsum记录整个过程中的最大和.

如果前面元素和presum大于0,则应该继续往后加,后面可能会越加越大,分别记录nowsum,presum的值,maxsum记录过程中的最大值.

最后输出maxsum.

class Solution {

public:

    int maxSubArray(vector<int>& nums) {

        int presum=nums[0];

        int nowsum=nums[0];

        int maxsum=nums[0];

        for(int i=1;i<nums.size();i++){

            if(presum<0){

                nowsum=nums[i];

                presum=nums[i];

            }else{

                nowsum+=nums[i];

                presum=nowsum;

            }

            maxsum=max(nowsum,maxsum);

        }

        return maxsum;

    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值