给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
[要求]
时间复杂度为
,空间复杂度为
第一行一个整数N。表示数组长度
接下来一行N个整数表示数组内的元素
输出一个整数表示答案
7 1 -2 3 5 -2 6 -1
12
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define max(a,b) ((a) > (b) ? (a) : (b))
int main(void) {
int n, *arr;
scanf("%d", &n);
arr = (int *) malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", arr + i);
}
int maxSum = INT_MIN, pre = -1, cur;
for (int i = 0; i < n; i++) {
cur = arr[i] + (pre > 0 ? pre : 0);
maxSum = max(maxSum, cur);
pre = cur;
}
printf("%d\n", maxSum);
return 0;
}