資料結構 PAT 01 複雜度1 最大子列和問題

2021-07-05 13:05:48 字數 1440 閱讀 9107

01-複雜度1 最大子列和問題給定k

個整數組成的序列,「連續子列」被定義為,其中 1≤

i≤j≤

k。「最大子列和」則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。

輸入第1行給出正整數k (

≤100

000);第2行給出

k個整數,其間以空格分隔。

在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。

6

-2 11 -4 13 -5 -2

20

#include // 三個整數的最大值

int max3(int a, int b, int c)

/* 分治法求list[left]到list[right]的最大子列和 */

int divideandconquer( int list, int left, int right )

// 下面是分的過程

center = (left + right) / 2; // 找到中分點

// 遞迴求兩邊子列的最大和

maxleftsum = divideandconquer(list, left, center);

maxrightsum = divideandconquer(list, center+1, right);

/* 下面求跨分界線的最大子列和 */

// 從中分點往左掃瞄

thisleftbordersum = 0, maxleftbordersum = 0;

for (int i = center; i>=left; i--)

// 左邊掃瞄結束

// 從中分點往左掃瞄

thisrightbordersum = 0, maxrightbordersum = 0;

for (int i = center+1; i<=right; i++)

// 左邊掃瞄結束

// 下面返回"治"的結果

return max3(maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum);

}// 1,分治法,nlogn的時間複雜度

int maxsubseqsum1(int a, int n)

// 2,迴圈,n平方的時間複雜度

int maxsubseqsum2(int a, int n)

}return maxsum;

}int maxsubseqsum3(int a, int n)

return maxsum;

}int main()

{ int k;

scanf("%d", &k);

int a[k];

for (int i = 0; i

PAT資料結構 01 複雜度1 最大子列和問題

題目 include using namespace std int maxsubseqsum2 int a,int n int maxsubseqsum3 int a,int left,int right 陣列名,元素左起0,元素終點n 1 int maxsubseqsum4 int a,int ...

PTA 資料結構 01 複雜度1 最大子列和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 與樣例等價,...

1資料結構 複雜度問題

p3 03 資料結構與演算法概述 演算法 p4 04 演算法分析 時間複雜度分析1 2 事前分析估算方法 3 在研究演算法的效率時,我們只考慮核心 的執行次數,這樣可以簡化分析。p5 05 06演算法分析 時間複雜度分析2 3 p7 07 演算法分析 時間複雜度分析4 p808 演算法分析 時間複雜...