最大子序列求和
阿新 • • 發佈:2021-02-11
問題:
給定一整數序列A1, A2,… An (可能有負數),求A1An的一個子序列AiAj,使得Ai到Aj的和最大
例如:整數序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和為21。對於這個問題,最簡單也是最容易想到的那就是窮舉所有子序列的方法。利用三重迴圈,依次求出所有子序列的和然後取最大的那個。
時間複雜度O(n),自己寫的,相信程式碼大家都看的懂。
#include <stdio.h>
int S(int *arr, int n);
int S(int *arr, int n) {
int MaxSum = 0, ThisSum = 0, j;
for (int i = 0; i < n; i++) {
ThisSum += *(arr + i);
ThisSum = ThisSum > 0 ? ThisSum : 0;
MaxSum = MaxSum < ThisSum ? ThisSum : MaxSum;
}
return MaxSum;
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", arr + i);
}
printf("%d\n", S(arr, n));
return 0;
}
如有看法與建議評論或私信