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