思路未亮,代码先上
int maxSubArray(int* nums, int numsSize)
{
int i;
int sum=0;
int max=nums[0];
for(i=0;i<numsSize;i++)
{
if(sum>0)
sum+=nums[i];
else sum = nums[i];
if(sum>max)
max=sum;
}
return max;
}
思路
- 数组有若干个子序列,sum记录序列之和 清楚sum刷新的关键条件是前面的数之和为负数。 (解释:如果前面都为负数了,自然不能再“连累”后面的数。)
- 最大子序列第一个数一定非负。刷新sum之前的那个数一定为负数
- 当sum>=0,继续加nums[i] 当sum<0,刷新sum,将下个数付给sum。 如果sum>max,刷新max
希望能帮助到你,我将无比快乐。
你的点赞✌️,是我前进的动力。