最大連續子列和:已知有乙個連續的數列,其值可正可負求其連續的最大子列之和。
即數列為-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,如果是全為負數,則返...