給n個數,要求n個數的最大連續子串行和。 dp在o(n)的時間內就能求出,很簡單。
但這裡用分治的思想去做, 複雜度是o(nlogn), 二分用了o(logn),每次二分內的處理用了o(n)
將乙個序列對半切(mid),那麼這個最大連續子串行和要麼在[l,mid],要麼在[mid+1,r],要麼跨越兩邊。
那麼就要求出[l,mid]的最大連續子串行和, [mid+1,r]的連續子串行和, 跨越兩邊的連續子串行和
前兩個問題是子問題,可以遞迴去解決。 所以只要解決第三個問題,然後返回三者中的最大者
第三個問題,我們可以從中間開始,分別向兩邊列舉。
列舉的時間複雜度是o(n),遞迴的深度是logn, 所以複雜度是o(nlogn)
1int fenzhi(int l, intr)2
16}17 tmp = 0;18
for(int i=mid+1;i<+r;++i)
1924
return max(lsum,midsum1+midsum2,rsum);
25 }
求最大連續子串行和 分治法實現
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。tips 這裡的時間複雜度為o nlogn 本題的思路是二分查詢法中學到的分治法,明確一點,...
分治法解最大連續公共子串行
這篇文章是在自學演算法導論練習的 直接入正題 最大連續子串行 分治法 原理 一串陣列可以對半分,一串陣列的最大連續子串行可能是在左端,右端以及跨越中間 依次遞迴分解求得最小塊的最大值,再向上組合成整段最大連續子串行 include includeusing namespace std int max...
使用分治法解最大連續子串行和問題
俺是菜鳥了解一下,這是我在演算法學習中的一些想法,如果有寫的不好的還請諒解,歡迎學習交流 3 問題 有長度為n的整數序列,求一段連續的子串行,要求該子串行的和為最大,並求出最大值。用分治法解決最大子串行和問題使用的是遞迴,它的思想是 1.將乙個長度為n的序列,一分為二變為兩個長度為n 2的子串行,繼...