【贪心算法】最大子序和

2.PNG

解题思路:贪心

局部最优:当前连续数组的和为负数时重新计数

全局最优:整个数组以正数开头的最大数值相连

1.设立两个变量result和curMax。result初始化为INT_MIN,记录之前的最大值,curMax记录当前最大值。当curMax>preMax时,更新result

2.遍历数组,curMax+=nums[i]:

a.如果curMax大于result,将result设置为curMax

b.如果curMax小于0,则将curMax重置为0(因为负数加另一个数不可能更大)

int maxSubArray(int* nums, int numsSize){
    int result = INT_MIN;

    int i;
    int curMax = 0;
    for(i = 0; i < numsSize; ++i) {
        curMax += nums[i];
        if(curMax > result)
            result = curMax;
        if (curMax < 0) {
            curMax = 0;
        }
    }
    return result;
}

1.PNG