LeetCode 題目總結
本博客不定期更新 LeetCode 題目總結,所有題目使用 Java 實現,前 400 題的部分題目也提供 JavaScript 代碼。但是我想現如今你完全可以用任何 AI 工具把 Java 代碼翻譯成 JavaScript 或任何其他語言以達到學習的目的。我不追求一行 AC 但是我追求一題多解,比較常規的思路,解釋清楚復雜度,代碼可讀性強。歡迎留言和評論,共同進步。這本是我自己用來復習的筆記,如果也能幫到你,那也是我的福報。
如果你想按類型刷題,可以參考我的標簽。我做出的分類比 LC 官方的更細一些,比如我有如下展示的這些類型,其中有一些類型在 2021 年 6 月以前官方沒有收錄,有的按照題設分類,有的按照思路/解法分類。同時有一些題目的解法或者思想很類似的,我也會以相關題目的形式列在文章的最底部。對于每一種類型的題,你可以基本按照題號從小到大開始刷,比較小的題號(尤其前 400)都是經典題,一般直接問算法,比較大的題號往往是前 400 題中某個題目的 followup 或變形,如果你看懂題目要考什么,其實涉及的算法在前 400 題應該都有涉及。題是刷不完的,只有總結反思才會有提高。練習多了之后,部分題目能看得出大概用什么思路但是面試的時候不會告訴你 tag 所以最后還是要通過模擬面試進一步提升水平。
- flood fill 島嶼類 - 往往是通過 BFS/DFS 從一個點開始遍歷整個二維數組,根據題意找島的個數/面積或者找一個點與點之間的距離,一個走到某個坐標上的步數/時間
- matrix 矩陣類,跟島嶼類型的題很接近,但是主要考點是二維數組的非常規遍歷,翻轉。官方把島嶼類的題也歸類到 matrix 一類了,我這里做了一些區分
- monotonic stack 單調棧 - 不容易想到但是的確能解決問題的一種思路,如果不用單調棧,暴力解基本是 O(n^2) 級別的
- two pointer 雙指針,包括很多可以用雙指針做但是沒有標注成雙指針類型的題
- prefix sum 前綴和
- sliding window 滑動窗口
- sliding window with fixed size 固定尺寸的滑動窗口
- palindrome 回文 - 也是雙指針的一個子類,兩邊往中間逼近
- line sweep 掃描線/差分數組 - 這一類的題其實也分為兩個子類,一類是類似會議室那種,一類是合并子區間那種
- counting sort 計數排序
- bucket sort 桶排序
- Longest Increasing Subsequence (LIS) 最長遞增子序列
- 這個類型的題往往跟 DP 有關
- Longest Common Subsequence (LCS) 最長相同子序列,經典題有
- two sum 兩數之和 - 一些算是 two sum 的 followup 題
- MOD - 結果非常大,需要取模的題。如果需要優化,大多涉及到二分
- binary search 二分法
- binary search on answer 在答案上二分
- 也是二分的一類題,一般不是直接在 input 數組上做二分
- Dijkstra 迪杰斯特拉算法
- 使用類似廣度優先搜索的方法解決圖的單源最短路徑問題,一般會涉及有向和有權的圖
- graph 圖論 - 包括很多 input signature 給的是樹但是實際是需要自己把圖或鄰接表建立起來的題,和官方壓根沒有給出 graph 這個 tag 的題(比如1192題,2021年6月這個題官方加了tag了)
- union find - 并查集 - 解決一些 BFS 做會復雜度高或 DFS 做會 stack overflow 的圖論的題,比如如果數據是以數據流的形式給出的,BFS 的復雜度就會很高。并查集有時候在 union 的過程中就能找到答案。
- knapsack 背包問題 - 動態規劃中的一個子類
- memorization - 記憶化(遞歸)- 動態規劃中的一個子類
- simulation - 模擬,一般不涉及算法,就是根據題意實現
發現博客園沒有很好的文章目錄,我做了一個騰訊文檔記錄總結寫過題解的題目并附上鏈接。

浙公網安備 33010602011771號