給定k個整數組成的序列,「連續子列」被定義為,其中 1 <= i <= j <= k。
「最大子列和」則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。
很容易想到一種最暴力的方式,那就是逐個逐個的累計,從i=0到i=n,總共需要n次大迴圈,並且對每次大迴圈裡又分別進行逐項相加並且判斷最大值 先給出時間複雜度為o(n^2)的演算法演算法一
#include
#include對以上演算法進行優化,關鍵在於,如果累加的和已經開始小於0,那麼就把前面的值都拋棄掉,重新計算最大值。int maxsubseqsum( int a, int n );
int main()
int maxsubseqsum( int a, int n ) /* j 迴圈結束 */ }
/* i迴圈結束 */
return maxsum; }
演算法二:
#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 每...