最大連續子列和

2021-08-28 05:07:17 字數 1076 閱讀 1690

最大連續子列和:已知有乙個連續的數列,其值可正可負求其連續的最大子列之和。

即數列為-1,0,2,3,-3,-4其最大子列和為2+3為5

一:暴力法   o(

每一次都計算從這個位置開始的所有的連續子列和中的最大值,最終求出其最大值。

int maxsequence(int *ptr, int n)

} } return max;

}

二:分治法  o(最大連續子列和只能出現在陣列的左半邊,右半邊,或橫跨中間位置。

int max(int a, int b, int c)

int maxsequence(int *ptr, int left, int right)

center = (left + right) / 2;

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

maxleftsum = maxsequence(ptr, left, center);

maxrightsum = maxsequence(ptr, center + 1, right);

leftbordermax = 0, leftbordersum = 0;

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

for (i = center; i >= left; i--) /* 從中線向左掃瞄 */

rightbordermax = 0, rightbordersum = 0;

for (i = center + 1; i <= right; i++) /* 從中線向右掃瞄 */

return max(maxleftsum, maxrightsum, leftbordermax + rightbordermax);

}

在此時子列和小於0的時候,可以把這個子列和置為0,因為後面的值加上乙個負數會小於它本身,因此設為0.

當此前子列和大於最大子列和時,把最大子列和的值設為當前子列和。

int maxsequence(int *ptr, int n)

return maxsum;

}

最大連續子列和

給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。子列是給定序列中隨機抽取某些數組成的新序列,如就是給定序列的子串行,而連續子串行即 中間不斷開,是連續的。ps 子串行必須按照給定序列的順序進行排列,不能亂放 由此,我們就可以知道什麼是最大的連續子串行的和,即最大連...

計蒜客 最大連續子列和

給定乙個序列,求和最大的子列,子列中元素一定是連續的 我們用dp i 來記錄以第 i 個位置元素作為末尾的和最大的子列和的值,當我們考慮第i 1 個位置的時候,我們只需要考慮這個元素是否加入到以 i 為結尾的最大子列中,根據dp 的定義我們可以知道dp i 1 ma x dp i a i 1 a i...

最大連續子串行和

最大連續子串行和問題是個很老的面試題了,最佳的解法是o n 複雜度,當然其中的一些小的地方還是有些值得注意的地方的。這裡還是總結三種常見的解法,重點關注最後一種o n 的解法即可。需要注意的是有些題目中的最大連續子串行和如果為負,則返回0 而本題目中的最大連續子串行和並不返回0,如果是全為負數,則返...