前言
隨著互聯網金九銀十的到來, 越來越多的互聯網公司為了考核程式員的思維能力,提高了面試的難度,其中之一就是加大了面試當中手撕演算法題的比例,這里說的演算法題不是深度學習,機器學習這類的演算法,而是排序,廣度優先,動態規劃這類既考核資料結構也考核編程能力的題目,刷題的網址非常的多,其中以leetcode是最為出名的,
在眾多的諸如阿里、騰訊等眾多BAT大廠之中,最看中面試者刷題技能的大概要數有“鏈表廠”之稱的位元組跳動了,作為一個新晉大廠,位元組跳動以高薪、技術大佬云集吸引了眾多的程式員呢,問題來了,怎么才能進入“鏈表廠”呢?答案之一:刷題!
刷題就不得不提 LeetCode 了,如何高效地刷 LeetCode 便是本文要說的事情了,
第一份演算法刷題寶典Table of Contents
目錄






第一章、動態規劃系列
具體來說,動態規劃的一般流程就是三步:暴力的遞回解法->帶備忘錄的遞回解法->迭代的動態規劃解法,
就思考流程來說,就分為以下幾步:找到狀態和選擇->明確dp陣列/函式的定義->尋找狀態之間的關系,
這就是思維模式的框架,本章都會按照以上的模式來解決問題,輔助讀者養成這種模式思維,有了方向遇到問題就不會抓瞎,足以解決一般的動態規劃問題,
- 動態規劃答疑篇
- 動態規劃和回溯演算法到底誰是誰爹?
- 動態規劃設計:最長遞增子序列
- 經典動態規劃: 0-1背包問題
- 經典動態規劃:編輯距離
- 經典動態規劃:高樓扔雞蛋(進階)
- 經典動態規劃:戳氣球
- 經典動態規劃:最長公共子序列
- 動態規劃之子序列問題解題模板
- 動態規劃之博弈問題
- 動態規劃之正則表達
- 動態規劃之四鍵鍵盤
- 動態規劃之KMP字符匹配演算法
- 貪心演算法之區間調度問題
回溯演算法

背包問題

擴展延伸

定義dp陣列的含義

四鍵鍵盤

第二章、資料結構系列
這一章主要是一些特殊的資料結構設計,比如單調堆疊解決Next GreaterNumber,單調佇列解決滑動視窗問題;還有常用資料結構的操作,比如鏈表、樹、二叉堆,
- 學習資料結構和演算法讀什么書
- 演算法學習之路
- 二叉堆詳解實作優先級佇列
- LRU演算法詳解
- 叉搜索樹操作集錦
- 如何計算完全二叉樹的節點數
- 特殊資料結構:單調堆疊
- 特殊資料結構:單調佇列
- 設計Twitter
- 遞回反轉鏈表的一部分
- 佇列實作堆疊堆疊實作佇列
二叉堆概覽

在BST中洗掉一個數

完全二叉樹的節點個數

如何使用單調堆疊解題

單調佇列

反轉鏈表前N個節點

第三章、演算法思維系列
本章包含一些常用的演算法技巧,比如前綴和、回溯思想、位操作、雙指標、如何正確書寫二分查找等等,
- 回溯演算法團滅子集.排列.組合問題
- 回溯演算法最佳實踐:解數獨
- 回溯演算法最佳實踐:括號生成
- 雙指標技巧總結
- twoSum問題的核心思想
- 常用的位操作
- 燒餅排序
- 前綴和技巧
- 字串乘法
- FloodFl演算法詳解及應用
- 區間調度之區間合井問題
- 區間調度之區間交集問題
- 信封嵌套問題
- 幾個反直覺的概率問題
回溯演算法秒殺數獨問題

快慢指標的常見演算法

演算法常用操作n&(n-1)

優化解法

FloodFill演算法概念

拓展延伸:自動魔棒工具和掃雷


區間交集問題

信封嵌套

三門問題

第四章、高頻面試系列
8說了,本章都是高頻面試題,配合前面的動態規劃系列,祝各位馬到成功!
如何用BFS演算法秒殺各種智力題

- 如何高效尋找素數
- 如何高效進行模冪運算
- 如何運用二分查找演算法
如何高效解決接雨水問題

- 如何去除有序陣列的重復元素
- 如何尋找最長回文子串
- 如何運用貪心思想玩跳躍游戲

- 如何k個一組反轉鏈表
- 如何判定括號合法性
- 如何尋找缺失的元素

如何同時尋找缺失和重復的元素
如何判斷回文鏈表
如何在無限序列中隨機抽取元素

如何調度考生的座位
Union-Find演算法詳解
Union-Find演算法應用
一行代碼就能解決的演算法題
二分查找高效判定子序列
Linux的行程、執行緒、檔案描述符是什么

關于Linux shell你必須知道的
Linux shell的實用小技巧
一文看懂session和cookie
加密演算法的前身今世

Git/SQL/正則運算式的在線練習平臺

這份演算法刷題寶典【Table of Contents】檔案共有562頁,需要完整版的朋友,可以點贊此文關注小編,【見下圖】來獲取! !

第二份演算法刷題寶典【LeetCode Cookbook】
目錄





(Σ( ° △ °|||)︴汗)大概1470+,就不一一例出了,望大家理解
第一章、關于LeetCode
說到LeetCode,作為一個程式員來說,應該不陌生,近幾年參加面試都會提到它,國內外的程式員用它刷題主要是為了面試,據歷史記載,這個網站2011年就成立了,馬上就要到自己10周年的生日了,每周舉行周賽,雙周賽,月賽,在有限時間內編碼,確實非常能考驗人的演算法能力,一些大公司贊助冠名的比賽獲得前幾名除了有獎品,還能直接拿到內推的機會,

第二章、演算法專題
本來天真的認為,把LeetCode所有題都完整刷一遍,就可以完整這本書了,經過事實證明,確實是天真了,因為LeetCode每天都會增加新題,有時候作業忙了,刷題進度就完全追不上題目更新的速度了,而且以我當前的刷題速度,一年才完成500+, 一年LeetCode也會更新400+多題,要起碼5~10年才能把所有的題目刷完,時間太長了,所以先給自己定了一個小目標,500 題就先把書寫出來,總結這個階段的刷題心得,和大家一起交流,要想把LeetCode所有題目都刷完,看來這本書要迭代5~10個版本了(一年迭代一版),
那么這一章就把已經刷完了的專題都整理一遍, 有相似套路的題目都放在一起,如果想快速面試的話,其實相同的題目刷2、3道就可以了,相同型別的題目非常熟練的情況下,再多刷幾道也是做無用功,做到目前為止,筆者認為動態規劃是最靈活的型別,這類題目沒有一個模板可以給你套用,它也是演算法之優雅的地方,筆者認為稱它為演算法的藝術不為過,動態規劃這型別,筆者也還沒有刷完,只刷了一部分,還在學習中,
那么就分享一下筆者目前刷過的題,和有相似點的題目吧,

Bit Manipu lation

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

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解答,只不過時間復雜度會高一點小,

第三章、一些模板
線段樹Segment Tree

友情提示:(內容太長,只截取部分)
并查集UnionFind

友情提示:(內容太長,只截取部分)
第四章、Leetcode題解
這一章就是LeetCode的題解了,筆者目前只刷到608題,題解這里有520題,都已經runtime beats100%了,相差的88題是還沒有beats 100%的,筆者還需要繼續優化~
題解慢慢更新中,歡迎大家提出更好的解法,點擊頁面下方的edit,會跳轉到github對應的頁面markdown中,可以提交你的最優解PR,
讓我們在題解的太空遨游吧~

由于內容實在太多,無法一一展現出來,只截取部分內容供大家參考,若你對文中演算法寶典感興趣的話可以關注+轉發后,在我的主頁私信【666】即可獲取到這份演算法寶典
1. Two Sum


327. Count of Range Sum


401. Binary Watch


529. Minesweeper

636. Exclusive Time of Functions

812. Largest Triangle Area


850. Rectangle Area lI




968. Binary Tree Cameras



999. Available Ca ptures for Rook





1157. Online Majority Element In Subarray


1252. Cells with Odd Values in a Matrix



這份(演算法刷題寶典【LeetCode Cookbook】)檔案共1121頁,需要完整版的朋友,可以點贊此文關注小編,【見下圖】來獲取!!

2020年筆者肯定還會繼續刷題,因為還沒有達到自己的一些目標,可能會朝著1000題奮進,也有可能刷到800題的時候回頭開始二刷,三刷,(不達目的不罷休吧~)
努力把資料結構與演算法這一塊兒給搞明白,相信一定會有不凡的人生!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/165763.html
標籤:其他
