分治是指divide and conquer,將大問題分解為小問題 ,最終再merge。所以在程式設計的時候分為遞迴操作和merge過程,而遞迴操作其實是很簡單的,例如歸併排序的時候排序時只需要執行幾段遞迴就可以。merge過程就會稍微有些繁瑣,也是分治的程式設計難點。具體的可以使用歸併排序中的乙個help陣列加上三個while那種結構,很實用。
陣列中最長子序列啊,子陣列問題,大多數都可以用「必須以第i個位置結尾,會怎麼怎麼樣,能不能推出i+1」,就類似於01中最長遞增子串行的問題。
子陣列就是陣列的子集,但是要求必須是連續的。
左右指標不管是兩個指標一起從左往右(未排序的正數陣列中累加和為。。。)還是左右分別走(存水),都會有乙個指標,這個指標會引導指標動作的方向。
比如要把圖中某一節點怎麼怎麼樣,同時把與他發生關係的其它節點也怎麼怎麼樣,用遞迴。看下面的島問題吧。
如果有一組數,先出現的數會對後出現的數有影響,可以考慮使用雙佇列的方法,包括左神的貓狗佇列問題(彈出第乙個貓或第乙個狗)和下面的dota2問題。
先處理偶數個數的中位數和奇數個數的中位數。有的時候偶數個數的中位數是中間兩個數的平均數,奇數個數就是中間的。
int n=a.size();
int median = (a[(n-1)/2] + a[n/2])/2;
如果是偶數,分別是前面和後面的平均數,如果是奇數,兩個數相等。((n-1)/2和(n/2)都是下標,如果要找第幾小的數要加一變成()(n-1)/2+1)和(n/2+1))。
中位數其實就是大小為第n/2大的數。這句話表面上是廢話,但是有用。例如在求兩個排序好的陣列合併之後的中位數時,如果要求log(m+n)的複雜度,就要用到這種思想了。
Jar Hell 問題解決方案
最近看到溫紹錦的jvm基礎,裡面看到這個jar hell問題的解決方法,之前遇到過一次,是乙個資源檔案,當時覺得挺麻煩,不知道還有這個方法,很棒,特地整理了下,記錄到這裡來,這個部落格開了好長時間了,一直以來也懶得寫東西,以後會堅持更新些。classloader classloader thread...
top K問題解決方案
1.使用最大最小堆。求最大的數用最小堆,求最小的數用最大堆。2.quick select演算法。使用類似快排的思路,根據pivot劃分陣列。3.使用排序方法,排序後再尋找top k元素。4.使用選擇排序的思想,對前k個元素部分排序。5.將1000 個數分成m組,每組尋找top k個數,得到m k個數...
范型List 排序的問題解決方案
乙個專案中用到list 中是乙個類的例項,並且需要對多個list 進行排序的問題,結合上網查詢得出以下的方法。其中第三個解決方案是qihangnet給出的,效率是最高的 專案中的類用乙個p類來代替 public class p public string value 實際運用過程中p有三個例項 p ...