以下內容爲300分鐘搞定算法面試的學習筆記。總結在公衆號“跟小新一起玩編程”。
基礎數據結構
數組、字符串
鏈表
特點:數據元素個數不確定,經常需要刪除或者插入元素而不是經常訪問某個元素。
應用:
- 快慢指針(有時候三個指針):鏈表翻轉、尋找鏈表倒數第k個元素、尋找鏈表中間位置元素、判斷鏈表是否有環。
- 構建一個虛假的鏈表頭,優點是不需要判斷鏈表是否爲空,刪除和插入簡單了,返回時返回鏈表頭的下一個元素:兩個排序鏈表進行整合;將鏈表的分離,前半部分是奇數,後半部分是偶數。
棧
特點:後進先出。
基本思想:只關心最後一次的操作,處理完上一次的操作,能在o(1)的時間內查找到更新前的一次操作。
LeetCode:20有效的括號;
LeetCode:739每日溫度。
隊列
特點:先進先出
應用:廣度優先遍歷
雙端隊列
隊列的頭尾兩端能在o(1)的時間內進行數據的查看、添加和刪除。
常用場景:實現一個長度動態變化的窗口或連續區間
LeetCode:239 滑動窗口的最大值
樹
樹的問題考查遞歸算法的熟練程度。
常考的樹:普通的二叉樹;平衡二叉樹;完全二叉樹;二叉搜索樹;四叉樹
遍歷:前序遍歷(樹的創建)、中序遍歷(如果是二叉搜索樹,遍歷結果是排序好的,LeetCode 230題)、後序遍歷(LeetCode 250題)
高級數據結構
優先隊列
與普通隊列的區別:保證每次取出的元素是隊列中優先級最高的,優先級自定義。
最常用的場景:從雜亂無章的數據中按照一定的順序篩選數據。例如:一個數組的前K大的數據。
本質:本質是一個二叉堆,利用一個數組結構來實現完全二叉樹。
LeetCode:347 前K個高頻元素
圖
最基本知識點:度、有向圖、無向圖、連通圖。
圖的算法:圖的遍歷——深度優先與廣度優先;環的檢測;拓撲排序;最短路徑算法(Dijkstra、Floyd);連通性相關——求解孤島數量、旅行商問題、圖的着色。
必須掌握的算法:
1.圖的存儲和表達方式:鄰接矩陣、鄰接鏈表
2.圖的遍歷:深度優先和廣度優先 (重要)
基於圖的遍歷的算法:二分圖的檢測、環的檢測
3.最短路徑
4.並查集
LeetCode :785 判斷二分圖
前綴樹
前綴樹葉稱字典樹,例如:給定一系列構成字典的字符串,需要在字典中找出所有以“ABC”開頭的字符串。使用前綴樹。
LeetCode:212 單詞搜索2
我已經爲大家整理好pdf,歡迎關注公衆號“跟小新一起玩編程”獲取。