LeetCode
LeetCode 499: The Maze III
·2 分鐘
LeetCode
Hard
Graph
Dijkstra
Shortest-Path
Heap
Matrix
LeetCode 499 解題筆記:Dijkstra 的優先度用 (距離, 路徑字串),滾動途中經過洞就要停下
LeetCode 864: Shortest Path to Get All Keys
·2 分鐘
LeetCode
Hard
Bfs
Bit-Manipulation
Matrix
LeetCode 864 解題筆記:BFS 的狀態是 (位置, 拿到的鑰匙遮罩),同一格拿著不同鑰匙是不同的節點
LeetCode 2963: Count the Number of Good Partitions
·1 分鐘
LeetCode
Hard
Math
Combinatorics
Hash-Table
Array
LeetCode 2963 解題筆記:同一個數的所有出現位置必須在同一段,用最後出現位置把陣列切成 b 個不可再分的區塊;區塊之間可切可不切,答案是 2^(b-1)
LeetCode 2376: Count Special Integers
·1 分鐘
LeetCode
Hard
Dynamic-Programming
Digit-Dp
Math
Bitmask
LeetCode 2376 解題筆記:數位 DP,狀態 (pos, tight, started, mask);mask 記錄用過的數字,前導零不能算成用過 0
LeetCode 2163: Minimum Difference in Sums After Removal of Elements
·2 分鐘
LeetCode
Hard
Dynamic-Programming
Heap
Array
LeetCode 2163 解題筆記:枚舉第一段和第二段的分界 k;左邊 nums[:k] 選 n 個最小的(最大堆維護),右邊 nums[k:] 選 n 個最大的(最小堆維護),前後綴各掃一次
LeetCode 1627: Graph Connectivity With Threshold
·1 分鐘
LeetCode
Hard
Math
Number-Theory
Union-Find
Array
LeetCode 1627 解題筆記:不用兩兩算 GCD;對每個 z > threshold,把 z 的所有倍數連起來,總共 O(n log n) 次合併
LeetCode 1944: Number of Visible People in a Queue
·1 分鐘
LeetCode
Hard
Stack
Monotonic-Stack
LeetCode 1944 解題筆記:從右往左維護遞減的單調棧,被彈出的都看得到,彈完剩下的那個也看得到
LeetCode 420: Strong Password Checker
·2 分鐘
LeetCode
Hard
Greedy
String
LeetCode 420 解題筆記:分長度三種情況,太長時優先刪除 len % 3 == 0 的重複段來抵銷取代次數
LeetCode 2193: Minimum Number of Moves to Make Palindrome
·1 分鐘
LeetCode
Hard
Two-Pointers
Greedy
String
Binary-Indexed-Tree
LeetCode 2193 解題筆記:貪心處理最外層:拿最後一個字元,把它最左邊的同伴換到最前面,花費是那個位置;落單的字元最後在正中間,花費是它到中間的距離
LeetCode 323: Number of Connected Components in an Undirected Graph
·2 分鐘
LeetCode
Medium
Graph
Dfs
Bfs
Union-Find
LeetCode 323 解題筆記:DFS 或 Union-Find 數連通塊;Union-Find 沒有路徑壓縮會慢很多
LeetCode 4041: Minimum Operations to Form Subset Sum II
·2 分鐘
LeetCode
Hard
Dynamic-Programming
Knapsack
Breadth-First-Search
Array
LeetCode 4041 解題筆記:乘除可以任意順序,用 BFS 找每個數能變成的所有值(不超過 sum)和最少步數,再做跟 4040 一樣的分組 0/1 背包
LeetCode 4040: Minimum Operations to Form Subset Sum I
·2 分鐘
LeetCode
Medium
Dynamic-Programming
Knapsack
Array
LeetCode 4040 解題筆記:先乘後除時,最佳的做法只會是「只乘」或「只除」;列出每個數能變成的值和步數,再做分組 0/1 背包