演算法和資料結構知識點圖
首先,瞭解演算法和資料結構有哪些知識點,在後面的學習中有 大局觀,對學習和刷題十分有幫助。
下面是我花了一天時間花的演算法和資料結構的知識結構,大家可以看看。
後面是為大家 精心挑選的LeetCode題單,並根據題目知識點的型別分好了類別,大家可以根據每個知識點,進行有針對性的刷題。
資料結構
陣列&雙指標
連結串列
佇列&棧
雜湊表
二叉樹
二叉搜尋樹
演算法
模擬
貪心
- LeetCode 11. 盛最多水的容器
- LeetCode 714. 買賣股票的最佳時機含手續費
- LeetCode 122. 買賣股票的最佳時機 II
- LeetCode 55. 跳躍遊戲
- LeetCode 309. 最佳買賣股票時機含冷凍期
- LeetCode 406. 根據身高重建佇列
二分
遞迴&回溯
深度優先搜尋DFS
寬度優先搜尋BFS
分治
排序演算法
Manacher演算法
字典樹Trie
動態規劃
最短路演算法
最小生成樹
拓撲排序
並查集
還在不斷完善中。
我把學習 演算法和資料結構和計算機核心的書籍 都下面整理好了獲取,在學習計算機的路上肯定能用到,身邊的同學都在看。
書單
https://mp.weixin.qq.com/s/vtIjAQQdEik2A7NCIamSqA
下面講一下如何刷題。
如何正確的做一道題
- 從簡入手: 先從簡單暴力(時間複雜度高)的方法入手。
- 優化: 思考如何在第一步的基礎上,如何優化演算法,降低時間複雜度。
- 構思程式碼: 有了以上兩步,我們此時應該已經有了一個正確的想法,此時我們應該構思程式碼,有那幾部分,每部分實現什麼功能,程式碼怎麼寫。而不是直接悶頭去寫程式碼,因為很多時候沒想清楚,直接去寫程式碼,會導致寫了一半發現思路不對,寫的程式碼都是錯誤的。
- 寫程式碼: 實現第三步程式碼。
- (Debug): 如果我們的題目沒有通過測試,應該檢查程式碼是不是有bug、思路對不對等。
- 總結與反思: 題目通過了,我們應該總結一下這道題考察的知識點、切入的角度、同型別的題目等,同時思考有沒有更優的辦法。
做到以上幾點,一道題學習的就很透了,遇到同型別的題目可以舉一反三啦。
最後
我是程式設計熊,位元組跳動、曠視科技前員工、ACM金牌選手。
微信搜尋【一隻程式設計熊】,獲取 學習資源、面試、內推交流群。