思路
要求出一个数组当中最大和的一串序列。
1.是一个动态规划+贪心问题,对于每一步,都判断当前的最好情况。即判断之前的序列和是否大于零,如果之前的是负数,那么显然再加上之前的序列之后,序列和会变小,所以就舍去之前的序列,以当前数字为起始点,重新向后查找。
2.这样可以排除之前的序列,要求最大和,还需要排除之后的序列,所以引入变量res。最初使res和sum相等(sum是上一步骤中求的序列和),之后每次都比较sum和res的大小,将最大的那个重新赋值给res。这样就可以保证res是最大的序列和啦。
代码
int maxSubArray(vector<int>& nums) {
int size=nums.size(),i=0,res=nums[0],sum=0;
if(size==1){return nums[0];}
while(i<size){
if(sum<0){
sum=nums[i];
}else{
sum+=nums[i];
}
res=max(res,sum);
i++;
}
return res;
}
运行结果
tips
一个月之前就做了这道题,暴力法没做出来,现在重新看,基本会做了,加油吧