寫在前面
BAT 等國內的一線名企,在招聘工程師的程序中,對演算法和資料結構都會重點考察,但演算法易學難精,我的很多粉絲技術能力不錯,但面試時總敗在演算法這一關,拿不到好 Offer,但說實話,資料結構和演算法花點時間,用對方法,很容易解決,面試官為什么愛問資料結構與演算法,答案很簡單:
- 演算法能力能夠準確辨別一個程式員的技術功底是否扎實;
- 演算法能力是發掘程式員的學習能力與成長潛力的關鍵手段;
- 演算法能力能夠協助判斷程式員在面對新問題時,分析并解決問題的能力;
- 演算法能力是設計一個高性能系統、性能優化的必備基礎,
很多人力扣( LeetCode)上狂刷題,還炫耀自己刷了多少,但這樣反而學不到東西,我建議你在刷題的程序中,把問題拆解、解題分析、得出結論、舉一反三,每一個環節都要想的清清楚楚,這樣才是高效的刷題方式,
關于這兩份力扣演算法寶典大可以見下圖免費獲取,暗號【csdn】
第一份力扣演算法刷題寶典(標星60k)

目錄




這份演算法刷題寶典大概有1400+題目,為了不影響大家的閱讀體驗,這里就不一一例舉出來了完整版的筆記在文末,有需要的朋友可以自取
演算法專題
Backtracking

- 排列問題Permutations,第46題,第47題,第60題,第526題,第996題,
- 組合問題Combination,第39題,第40題,第77題,第216題,
- 排列和組合雜交問題,第1079題,
- N皇后終極解法(=進制解法),第51題,第52題,
- 數獨問題,第37題,
- 四個方向搜索,第79題,第212題,第980題,
- 子集合問題,第78題,第90題,
- Trie,第208題,第211題,
- BFS優化,第126題,第127題,
- DFS模板,(只是一個例子,不對應任何題)

Bit Manipulation

- 異或的特性,第136題,第268題,第389題,第421題,

Linked List

- 巧妙的構造虛擬頭結點,可以使遍歷處理邏輯更加統一,
- 靈活使用遞回,構造遞回條件,使用遞回可以巧妙的解題,不過需要注意有些題目不能使用遞回,因為遞回深度太深會導致超時和堆疊溢位,
- 鏈表區間逆序,第92題,
- 鏈表尋找中間節點,第876題,鏈表尋找倒數第n個節點,第19題,只需要-次遍歷就可以得到答案,
- 合并K個有序鏈表,第21題,第23題,
- 鏈表歸類,第86題,第328題,
- 鏈表排序,時間復雜度要求O(n * logn),空間復雜度0(1),只有一種做法,歸并排序,至頂向下歸并,第148題,
- 判斷鏈表是否存在環,如果有環,輸出環的交叉點的下標;判斷2個鏈表是否有交叉點,如果有交叉點,輸出交叉點,第141題,第142題,第160題,

Segment Tree

- 線段數的經典陣列實作寫法,將合并兩個節點pushUp邏輯抽象出來了,可以實作任意操作(常見的操作有:加法,取max, min等等),第218題,第303題,第307題,第699題,
- 計數線段樹的經典寫法,第315題,第327題,第493題,
- 線段樹的樹的實作寫法,第715題,第732題,
- 區間懶惰更新,第218題,第699題,
- 離散化,離散化需要注意一個特殊情況:假如三個區間為[1,10] [1,4] [6,10],離散化后x[1]=1,x[2]=4,x[3]=6,x[4]=10,第一個區間為[1,4],第二個區間為[1,2],第三個區間為[3,4],這樣一來,區間一=區間二+區間三,這和離散前的模型不符,離散前,很明顯,區間一>區間二+區間三,正確的做法是:在相差大于1的數間加一個數,例如在上面1 46 10中間加5,即可x[1]=1,x[2]=4,x[3]=5,x[4]=6,x[5]=10,這樣處理之后,區間一是1-5,區間二是1-2,區間三是4-5,
- 靈活構建線段樹,線段樹節點可以存盤多條資訊,合并兩個節點的pushUp操作也可以是多樣的,第850題,第1157題,
Sliding Window

- 雙指標滑動視窗的經典寫法,右指標不斷往右移,移動到不能往右移動為止(具體條件根據題目而定),當右指標到最右邊以后,開始挪動左指標,釋放視窗左邊界,第3題,第76題,第209題,第424題,第438題,第567題,第713題,第763題,第845題,第881題,第904題,第978題,第992題,第1004題,第1040題,第1052題,
Sort

- 深刻的理解多路快排,第75題,
- 鏈表的排序,插入排序(第147題)和歸并排序(第148題)
- 桶排序和基數排序,第164題,
- "擺動排序",第324題,
- 兩兩不相鄰的排序,第767題,第1054題,
- "餅子排序",第969題,

Union Find

- 靈活使用并查集的思想,熟練掌握并查集的模板,模板中有兩種并查集的實作方式,-種是路徑壓縮+秩優化的版本,另外一種是計算每個集合中元素的個數+最大集合元素個數的版本,這兩種版本都有各自使用的地方,能使用第一類并查集模板的題目有:第128題,第130題,第547題,第684題,第721題,第765題,第778題,第839題,第924題,第928題,第947題,第952題,第959題,第990題,能使用第二類并查集模板的題目有:第803題,第952題,第803題秩優化和統計集合個數這些地方會卡時間,如果不優化,會TLE,
- 并查集是一種思想,有些題需要靈活使用這種思想,而不是死套模板,如第399題,這一題是stringUnionFind,利用并查集思想實作的,這里每個節點是基于字串和map的,而不是單純的用int節點編號實作的,
- 有些題死套模板反而做不出來,比如第685題,這一題不能路徑壓縮和秩優化,因為題目中涉及到有向圖,需要知道節點的前驅節點,如果路徑壓縮了,這一題就沒法做了,這一題不需要路徑壓縮和秩優化,
- 靈活的抽象題目給的資訊,將給定的資訊合理的編號,使用并查集解題,并用map降低時間復雜度,如第721題,第959題,
- 關于地圖,磚塊,網格的題目,可以新建一個特殊節點,將四周邊緣的磚塊或者網格都union()到這個特殊節點上,第130題,第803題,
- 能用并查集的題目,一般也可以用DFS和BFS解答,只不過時間復雜度會高一點,

Leetcode題解
4. Median of Two Sorted Arrays



17. Letter Combinations of a Phone Num ber


51. N-Queens


84. Largest Rectangle in Histogram


114. Flatten Binary Tree to Linked List




199. Binary Tree Right Side View


237. Delete Node in a Linked List


463. lsland Perimeter


500. Keyboard Row


1105. Filling, Bookcase Shelves



1145. Binary Tree Coloring Game



1302. Deepest Leaves Sum

第二份力扣演算法刷題寶典(標星68k)

第一章、動態規劃系列


背包問題之零錢兌換


經典動態規劃問題:高樓扔雞蛋(進階)


貪心演算法之區間調度問題

團滅LeetCode股票買賣問題


第二章、資料結構系列

二叉堆詳解實作優先級佇列


LRU演算法詳解


特殊資料結構:單調佇列



佇列實作堆疊|堆疊實作佇列


第三章、演算法思維系列


滑動視窗技巧


燒餅排序



字串乘法


FloodFill演算法詳解及應用


第四章、高頻面試系列


如何k個一組反轉鏈表

隨機演算法之水塘抽樣演算法


Union-Find演算法詳解

-行代碼就能解決的演算法題

二分查找高效判定子序列

第五章、計算機技術

Linux的行程、執行緒、檔案描述符是什么?

一文讀懂session和cookie


密碼演算法的前世今生

由于內容涉及到的知識點實在太多,小編就不一一展示給大家了,這兩份【力扣演算法刷題寶典】檔案分別為1121與666頁,需要完整版的朋友,可以點贊此文關注小編,見下圖后免費獲取,暗號【csdn】

最后
我們刷演算法就是為了面試,說白了,演算法不過是手段,是套路,是策略,而不是最終目的,我們的最終目的是賺錢,是讓我們自己以及我們的家庭過上更好的生活,所以熟練掌握作業中的常用工具,得心應手地做業務賺錢才是王道,希望讀者不要舍本逐末,被各種培訓機構對演算法的鼓吹所迷惑,看我們的演算法小抄足夠你學演算法了,更重要的是要多寫代碼,多做工程,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/220691.html
標籤:其他
上一篇:技術點14:session
下一篇:Alibaba【Java崗】P5-P8級別“有史以來”最新最全面試真題:JVM+資料庫+spring+資料結構+多執行緒+網路

