求最大子列和問題兩種演算法比較

2021-06-27 12:06:49 字數 675 閱讀 7549

給定k個整數組成的序列,「連續子列」被定義為,其中 1 <= i <= j <= k。

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

很容易想到一種最暴力的方式,那就是逐個逐個的累計,從i=0到i=n,總共需要n次大迴圈,並且對每次大迴圈裡又分別進行逐項相加並且判斷最大值 先給出時間複雜度為o(n^2)的演算法演算法一

#include

#include

int  maxsubseqsum( int a, int n );

int main()

int maxsubseqsum( int a, int n ) /* j 迴圈結束 */ }

/* i迴圈結束 */

return maxsum; }

對以上演算法進行優化,關鍵在於,如果累加的和已經開始小於0,那麼就把前面的值都拋棄掉,重新計算最大值。

演算法二:

#include

#include

int main()

printf("最大子列之和是%d\n",maxint);

free(p);//釋放空間

return 0;}

除錯經驗 求最大子列和的兩種普通演算法的比較

給出乙個陣列 可看成乙個數列 求其最大子列和 規定最大子列和的最小值為0 為了除錯這個程式,熬夜花費了近4個小時。好可怕!好在終於出結果了。中間的各種除錯錯誤暫且略過。只說不練假把式 這句話確時有道理!本程式做了擴充套件,適用於雙精度資料型別。include include include defi...

求最大子列和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。在此方法中用了三個迴圈,第一層是子列左端,第二層是子列右端,裡層為子列的求和。t n o n 3 int thissum maxsum 0 i...

求最大子列和問題

方法1 暴力計算法 i 表示子列開始索引 j 表示子列結束索引 k ipublic int method1 int arr if tempmax maxsum return maxsum 三層for迴圈,時間複雜度 t n n 3 方法2 暴力破解優化 因為方法一每次都是從 i 加到 j 而 j 每...