贪心算法-题目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的区别
posted @ 2024-01-18 15:45  小小卡拉咪  阅读(31)  评论(0)    收藏  举报