1. 程式人生 > 其它 >最大子序列求和

最大子序列求和

技術標籤:資料結構與演算法c語言演算法

問題:
給定一整數序列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; }

如有看法與建議評論或私信