子数组的最大累加和问题
题目
给定一个数组arr,返回子数组的最大累加和。
例如,arr = {1, -2, 3, 5, -2, 6, 1},所有子数组中,{3, 5, -2, 6}累加出最大的和为12,所以返回12。
测试代码
1 #include <stdio.h> 2 #include <limits.h> 3 4 int maxSum(int *arr, int n) 5 { 6 int max = INT_MIN; 7 int cur = 0; 8 for (int i = 0; i < n; i++) 9 { 10 cur += arr[i]; 11 max = max > cur ? max : cur; 12 cur = cur < 0 ? 0 : cur; 13 } 14 return max; 15 } 16 17 int main() 18 { 19 int arr[10] = { 1, -2, 3, -4, -5 }; 20 int len = sizeof(arr) / sizeof(arr[0]); 21 printf("%d\n", maxSum(arr, len)); 22 23 }