#define MAX(a,b) (a) > (b) ? (a) : (b)
int maxSubArray(int* nums, int numsSize){
int max = nums[0];
int sum = nums[0];
for (int i = 1; i < numsSize; i++) {
if (sum < 0) { // 当前sum值小于0, 那么不管怎么加都会把后续的值变小, 所以直接置为0, 重新计算sum值
sum = 0;
}
sum += nums[i];
max = MAX(sum, max);
}
return max;
}
动态规划方法求解:
// 定义: dp[i] : 当前以nums[i]结尾的最大sum和
// 关系: nums[i] >= 0 && dp[i-1] >= 0: dp[i] = nums[i] + dp[i=1]
// nums[i] >= 0 && dp[i-1] < 0 :dp[i] = nums[i]
// dp[i] = max(nums[i] + dp[i=1], nums[i])
// 初始化: dp[0] = nums[0], dp[1] = max(dp[0], dp[0] + nums[1])
// dp[2] = max(dp[1] + nums[2], nums[2])
#define MAX(a, b) (a) > (b) ? (a) : (b)
int maxSubArray(int* nums, int numsSize){
if (nums == NULL || numsSize == 0) return 0;
int *dp = malloc(sizeof (int) * numsSize);
dp[0] = nums[0];
int result = dp[0];
for (int i = 1; i < numsSize; i++) {
dp[i] = MAX(dp[i-1] + nums[i], nums[i]);
result = MAX(result, dp[i]);
}
return result;
}