贪心算法-题目3力扣53
给你一个整数数组 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 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; }
我写的:
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的区别
浙公网安备 33010602011771号