↓快轉到主要內容

Heap

LeetCode 23: Merge k Sorted Lists
·3 分鐘
LeetCode Hard Linked-List Heap Merge-Sort Divide-and-Conquer
LeetCode 23 解題筆記:heap 只放 k 個開頭,以及分治兩兩合併
Heap 優先佇列
·3 分鐘
演算法 Heap Priority-Queue Greedy Dijkstra
heapq 基本用法、Top-K、lazy deletion、雙 heap、K 路合併、掃描線與 Dijkstra
LeetCode 253: Meeting Rooms II
·1 分鐘
LeetCode Medium Heap Sorting Intervals Sweep-Line
LeetCode 253 解題筆記:heap 存進行中會議的結束時間,半開區間要用 <=
LeetCode 716: Max Stack
·2 分鐘
LeetCode Hard Stack Heap Design Lazy-Deletion
LeetCode 716 解題筆記:stack 和 heap 都存唯一 id,刪除只記 id,查詢時再丟掉已刪除的;用值記錄會分不清重複的元素
LeetCode 2973: Find Number of Coins to Place in Tree Nodes
·2 分鐘
LeetCode Hard Dynamic-Programming Tree-Dp Depth-First-Search Sorting Heap Tree
LeetCode 2973 解題筆記:三個數的最大乘積只可能是「最大的三個」或「最小的兩個 × 最大的一個」;每個子樹只回傳最小 2 個和最大 3 個,後序合併
LeetCode 4046: Minimum Cost Path With At Most K Turns
·2 分鐘
LeetCode Hard Graph Shortest-Path Heap Matrix
LeetCode 4046 解題筆記:Dijkstra 的狀態加上「上一步方向」和「已轉彎數」;同一格同方向時,先處理的成本較低,轉彎數也較少的話就支配後面的狀態
LeetCode 1425: Constrained Subsequence Sum
·1 分鐘
LeetCode Hard Sliding-Window Dynamic-Programming Monotonic-Queue Heap Queue Array
LeetCode 1425 解題筆記:dp[i] = nums[i] + max(0, 前 k 個 dp 的最大值);前 k 個 dp 的最大值是滑動視窗最大值,用單調佇列 O(1) 取得
LeetCode 1354: Construct Target Array With Multiple Sums
·1 分鐘
LeetCode Hard Heap Math Greedy
LeetCode 1354 解題筆記:反著做,最大值一定是最後被設定的;差距大時用取餘數一次跳完
LeetCode 499: The Maze III
·2 分鐘
LeetCode Hard Graph Dijkstra Shortest-Path Heap Matrix
LeetCode 499 解題筆記:Dijkstra 的優先度用 (距離, 路徑字串),滾動途中經過洞就要停下
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 2102: Sequentially Ordinal Rank Tracker
·1 分鐘
LeetCode Hard Heap Design Two-Heaps
LeetCode 2102 解題筆記:雙 heap 維持「前 k 名」和「其他」,自訂 lt 處理字串的反向比較
LeetCode 1878: Get Biggest Three Rhombus Sums in a Grid
·1 分鐘
LeetCode Medium Matrix Enumeration Heap
LeetCode 1878 解題筆記:枚舉每個頂點和大小,沿四條邊走一圈加總,取前三大的不同值