给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
子数组 是数组中的一个连续部分。
解题思路:从投开始相加,每加一个数如果大于最大值就更新最大值,当加到的值小于0那么就从下一个值开始算起。
别人写的:
int maxSubArray(int* nums, int numsSize) { int sum=0; int max=nums[0]; if(numsSize==1) return nums[0]; for(int i=0;i<numsSize;i++){ sum+=nums[i]; if(sum>max) max=sum; if((i!=numsSize-1)&&sum<0) sum=0; } return max; } int maxSubArray(int* nums, int numsSize) { int sum=0; int max=nums[0]; if(numsSize==1) return nums[0]; for(int i=0;i<numsSize;++i){ sum+=nums[i]; if(sum>max) max=sum; if(sum<0) sum=0;//此处为什么写++i就成功了 } return max; } for循环中i++和++i的区别 标签:numsSize,maxVal,subArrSum,nums,int,53,力扣,数组,贪心 From: https://www.cnblogs.com/lzj1996/p/17972641int maxSubArray(int* nums, int numsSize){ int maxVal = INT_MIN; int subArrSum = 0; int i; for(i = 0; i < numsSize; ++i) { subArrSum += nums[i]; // 若当前局部和大于之前的最大结果,对结果进行更新 maxVal = subArrSum > maxVal ? subArrSum : maxVal; // 若当前局部和为负,对结果无益。则从nums[i+1]开始应重新计算。 subArrSum = subArrSum < 0 ? 0 : subArrSum; } return maxVal; }
我写的: