给定一个数组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; }