codetop演算法分類

calvincalvin發表於2024-09-05

以下是按照常見演算法標籤將題目進行歸類的列表:

1. 動態規劃

10. 正規表示式匹配
1143. 最長公共子序列
115. 不同的子序列
120. 三角形最小路徑和
121. 買賣股票的最佳時機
123. 買賣股票的最佳時機 III
131. 分割回文串
152. 乘積最大子陣列
188. 買賣股票的最佳時機 IV
198. 打家劫舍
213. 打家劫舍 II
221. 最大正方形
256. 粉刷房子
279. 完全平方數
300. 最長上升子序列
309. 最佳買賣股票時機含冷凍期
322. 零錢兌換
337. 打家劫舍 III
343. 整數拆分
376. 擺動序列
395. 至少有K個重複字元的最長子串
410. 分割陣列的最大值
416. 分割等和子集
494. 目標和
509. 斐波那契數
516. 最長迴文子序列
518. 零錢兌換 II
53. 最大子陣列和
55. 跳躍遊戲
72. 編輯距離
85. 最大矩形
91. 解碼方法
95. 不同的二叉搜尋樹 II
96. 不同的二叉搜尋樹
221. 最大正方形
647. 迴文子串
673. 最長遞增子序列的個數
劍指 Offer 42. 連續子陣列的最大和
面試題 17.24. 最大子矩陣

2. 雜湊表

1. 兩數之和
128. 最長連續序列
138. 複製帶隨機指標的連結串列
149. 直線上最多的點數
217. 存在重複元素
242. 有效的字母異位詞
347. 前 K 個高頻元素
349. 兩個陣列的交集
454. 四數相加 II
560. 和為K的子陣列
劍指 Offer 03. 陣列中重複的數字
劍指 Offer 48. 最長不含重複字元的子字串
554. 磚牆

3. 雙指標

11. 盛最多水的容器
15. 三數之和
16. 最接近的三數之和
19. 刪除連結串列的倒數第N個節點
26. 刪除排序陣列中的重複項
27. 移除元素
28. 實現 strStr()
30. 串聯所有單詞的子串
42. 接雨水
61. 旋轉連結串列
75. 顏色分類
141. 環形連結串列
142. 環形連結串列 II
143. 重排連結串列
167. 兩數之和 II - 輸入有序陣列
209. 長度最小的子陣列
283. 移動零
344. 反轉字串
524. 透過刪除字母匹配到字典裡最長單詞
劍指 Offer 21. 調整陣列順序使奇數位於偶數前面
劍指 Offer 22. 連結串列中倒數第k個節點

4. 貪心

11. 盛最多水的容器
45. 跳躍遊戲 II
55. 跳躍遊戲
134. 加油站
135. 分發糖果
179. 最大數
392. 判斷子序列
406. 根據身高重建佇列
452. 用最少數量的箭引爆氣球
621. 任務排程器
763. 劃分字母區間

5. 回溯

17. 電話號碼的字母組合
22. 括號生成
37. 解數獨
39. 組合總和
40. 組合總和 II
46. 全排列
47. 全排列 II
51. N 皇后
52. N 皇后 II
78. 子集
79. 單詞搜尋
93. 復原 IP 地址
131. 分割回文串
140. 單詞拆分 II
216. 組合總和 III
401. 二進位制手錶
劍指 Offer 34. 二叉樹中和為某一值的路徑

6. 排序

4. 尋找兩個正序陣列的中位數
56. 合併區間
75. 顏色分類
88. 合併兩個有序陣列
148. 排序連結串列
164. 最大間距
179. 最大數
215. 陣列中的第K個最大元素
347. 前 K 個高頻元素
劍指 Offer 40. 最小的k個數
補充題4. 手撕快速排序
補充題5. 手撕歸併排序

7. 陣列

11. 盛最多水的容器
26. 刪除排序陣列中的重複項
27. 移除元素
31. 下一個排列
33. 搜尋旋轉排序陣列
34. 在排序陣列中查詢元素的第一個和最後一個位置
36. 有效的數獨
41. 缺失的第一個正數
48. 旋轉影像
53. 最大子序和
54. 螺旋矩陣
59. 螺旋矩陣 II
66. 加一
73. 矩陣置零
74. 搜尋一個二維矩陣
118. 楊輝三角
119. 楊輝三角 II
121. 買賣股票的最佳時機
122. 買賣股票的最佳時機 II
128. 最長連續序列
189. 旋轉陣列
209. 長度最小的子陣列
238. 除自身以外陣列的乘積
283. 移動零
287. 尋找重複數
劍指 Offer 04. 二維陣列中的查詢
劍指 Offer 29. 順時針列印矩陣

8.

94. 二叉樹的中序遍歷
95. 不同的二叉搜尋樹 II
96. 不同的二叉搜尋樹
100. 相同的樹
101. 對稱二叉樹
102. 二叉樹的層序遍歷
103. 二叉樹的鋸齒形層次遍歷
104. 二叉樹的最大深度
105. 從前序與中序遍歷序列構造二叉樹
106. 從中序與後序遍歷序列構造二叉樹
110. 平衡二叉樹
111. 二叉樹的最小深度
112. 路徑總和
114. 二叉樹展開為連結串列
129. 求根到葉子節點數字之和
144. 二叉樹的前序遍歷
145. 二叉樹的後序遍歷
199. 二叉樹的右檢視
222. 完全二叉樹的節點個數
236. 二叉樹的最近公共祖先
劍指 Offer 26. 樹的子結構
劍指 Offer 27. 二叉樹的映象
劍指 Offer 33. 二叉搜尋樹的後序遍歷序列
劍指 Offer 34. 二叉樹中和為某一值的路徑
劍指 Offer 36. 二叉搜尋樹與雙向連結串列
劍指 Offer 54. 二叉搜尋樹的第k大節點

9. 連結串列

2. 兩數相加
19. 刪除連結串列的倒數第N個節點
21. 合併兩個有序連結串列
23. 合併K個排序連結串列
24. 兩兩交換連結串列中的節點
25. K 個一組翻轉連結串列
82. 刪除排序連結串列中的重複元素 II
83. 刪除排序連結串列中的重複元素
138. 複製帶隨機指標的連結串列
141. 環形連結串列
142. 環形連結串列 II
143. 重排連結串列
160. 相交連結串列
206. 反轉連結串列
234. 迴文連結串列
445. 兩數相加 II
劍指 Offer 22. 連結串列中倒數第k個節點
劍指 Offer 52. 兩個連結串列的第一個公共節點

10. 二分查詢

4. 尋找兩個正序陣列的中位數
33. 搜尋旋轉排序陣列
34. 在排序陣列中查詢元素的第一個和最後一個位置
35. 搜尋插入位置
69. x 的平方根
74. 搜尋二維矩陣
81. 搜尋旋轉排序陣列 II
153. 尋找旋轉排序陣列中的最小值
154. 尋找旋轉排序陣列中的最小值 II
162. 尋找峰值
240. 搜尋二維矩陣 II
378. 有序矩陣中第K小的元素
劍指 Offer 11. 旋轉陣列的最小數字
劍指 Offer 53 - I. 在排序陣列中查詢數字 I

11.

20. 有效的括號
32. 最長有效括號
42. 接雨水
84. 柱狀圖中最大的矩形
85. 最大矩形
155. 最小棧
224. 基本計算器
225. 用佇列實現棧
232. 用棧實現佇列
331. 驗證二叉樹的前序序列化
394. 字串解碼
劍指 Offer 09. 用兩個棧實現佇列
劍指 Offer 33. 二叉搜尋樹的後序遍歷序列

12. 數學

7. 整數反轉
8. 字串轉換整數 (atoi)
9. 迴文數
12. 整數轉羅馬數字
13. 羅馬數字轉整數
29. 兩數相除
50. Pow(x, n)
67. 二進位制求和
1281. 整數的各位積和之差
劍指 Offer 62. 圓圈中最後剩下的數字

13. 字串

5. 最長迴文子串
6. Z 字形變換
14. 最長公共字首
22. 括號生成
28. 實現 strStr()
49. 字母異位詞分組
58. 最後一個單詞的長度
67. 二進位制求和
125. 驗證迴文串
151. 翻轉字串裡的單詞
394. 字串解碼
劍指 Offer 48. 最長不含重複字元的子字串

14.

133. 克隆圖
207. 課程表
210. 課程表 II
329. 矩陣中的最長遞增路徑
劍指 Offer 26. 樹的子結構

15. 設計

146. LRU快取機制
155. 最小棧
225. 用佇列實現棧
232. 用棧實現佇列
380. 常數時間插入、刪除和獲取隨機元素
460. LFU快取
劍指 Offer 09. 用兩個棧實現佇列
劍指 Offer 36. 二叉搜尋樹與雙向連結串列

16. 遞迴

21. 合併兩個有序連結串列
23. 合併K個排序連結串列
95. 不同的二叉搜尋樹 II
96. 不同的二叉搜尋樹
98. 驗證二叉搜尋樹
101. 對稱二叉樹
104. 二叉樹的最大深度
劍指 Offer 34. 二叉樹中和為某一值的路徑
劍指 Offer 36. 二叉搜尋樹與雙向連結串列
劍指 Offer 62. 圓圈中最後剩下的數字

17. 貪心

11. 盛最多水的容器
45. 跳躍遊戲 II
55. 跳躍遊戲
134. 加油站
135. 分發糖果
140. 單詞拆分 II
179. 最大數
406. 根據身高重建佇列
452. 用最少數量的箭引爆氣球
621. 任務排程器
763. 劃分字母區間

18. 並查集

130. 被圍繞的區域
200. 島嶼數量
261. 以圖判樹
323. 無向圖中連通分量的數目
劍指 Offer 26. 樹的子結構
劍指 Offer 62. 圓圈中最後剩下的數字

19. 位運算

136. 只出現一次的數字
137. 只出現一次的數字 II
190. 顛倒二進位制位
191. 位1的個數
231. 2的冪
劍指 Offer 39. 陣列中出現次數超過一半的數字
劍指 Offer 62. 圓圈中最後剩下的數字

這些題目被歸類到了不同的演算法標籤下,可以幫助你更好地理解和掌握每種演算法的應用場景。


當然可以!動態規劃(DP)在不同型別的題目中應用廣泛,通常根據問題的性質,可以進一步將動態規劃問題歸類為以下幾種常見型別:

1. 線性 DP

這些問題的狀態轉移一般是基於一個或多個前面的狀態,常見的有陣列、字串相關的題目。

53. 最大子陣列和
62. 不同路徑
63. 不同路徑 II
70. 爬樓梯
198. 打家劫舍
213. 打家劫舍 II
221. 最大正方形
300. 最長上升子序列
309. 最佳買賣股票時機含冷凍期
376. 擺動序列
413. 等差數列劃分
509. 斐波那契數
518. 零錢兌換 II
劍指 Offer 10- I. 斐波那契數列
劍指 Offer 10- II. 青蛙跳臺階問題
劍指 Offer 42. 連續子陣列的最大和

2. 揹包問題

揹包問題的核心是如何選擇一些物品,使得總價值最大或滿足某個條件。經典的揹包問題有0-1揹包、完全揹包、多重揹包等。

416. 分割等和子集
518. 零錢兌換 II

3. 區間 DP

區間 DP 常用於需要考慮多個區間組合的最佳化問題,如字串的編輯距離、矩陣連乘問題等。

516. 最長迴文子序列
312. 戳氣球

4. 子序列/子陣列 DP

這類問題通常是求解陣列或字串中的某個子序列、子陣列的最優解,如最長遞增子序列、最長公共子序列等。

1143. 最長公共子序列
300. 最長上升子序列
392. 判斷子序列
647. 迴文子串
673. 最長遞增子序列的個數

5. 樹形 DP

樹形 DP 通常應用於樹結構的問題,解決方法是透過遞迴或自底向上地進行動態規劃。

337. 打家劫舍 III
劍指 Offer 34. 二叉樹中和為某一值的路徑

6. 字串 DP

字串 DP 問題處理的是字串的各種匹配、變換問題,如編輯距離、正則匹配等。

10. 正規表示式匹配
44. 萬用字元匹配
72. 編輯距離
97. 交錯字串
115. 不同的子序列
131. 分割回文串
139. 單詞拆分
140. 單詞拆分 II

7. 數位 DP

數位 DP 是一種特殊的動態規劃問題,通常用於解決數字相關的問題,比如計算滿足某些條件的數字個數。

233. 數字 1 的個數

8. 狀態壓縮 DP

狀態壓縮 DP 主要用於解決涉及多個條件或狀態的組合問題,常見於圖論中的最短路徑問題或集合覆蓋問題。

691. 貼紙拼詞

9. 博弈 DP

博弈 DP 主要用於求解兩個人(或多個人)在一個遊戲中的最優策略問題。

464. 我能贏嗎
877. 石子游戲

10. 矩陣 DP

矩陣 DP 通常用來解決二維表格或矩陣中的最優解問題,如最大正方形、路徑問題等。

120. 三角形最小路徑和
221. 最大正方形
64. 最小路徑和

11. 記憶化搜尋

記憶化搜尋是一種將遞迴與動態規劃結合的方法,透過儲存中間結果來避免重複計算。

329. 矩陣中的最長遞增路徑

12. 其他 DP 問題

一些問題可能不完全歸屬於上述某一類,但依然可以使用動態規劃的思想來解決。

887. 雞蛋掉落

透過上述歸類,你可以更好地理解不同型別的動態規劃問題及其應用場景。隨著練習的深入,你會逐漸掌握每種型別的解題思路,並在遇到新問題時迅速識別並應用合適的動態規劃技巧。

相關文章