Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions Arrays & Hashing/Template - Arrays & Hashing - Main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
LeetCodeLv:
Algorithm:
- Array
- Hash
- String
---

# Problem
[Title](URL)

# Concept
- 核心不變量:
- (例)頻次表/映射如何維護一致性
- (例)排序鍵或哈希鍵的正規化(如排序字母、固定長度)
- 模板選型:Array/Hash/Sorting/Counting

# Warning / 常錯點
- map.count(key) 與 map[key] 之差異([] 可能插入鍵)
- 字串/編碼處理避免反覆 substr/拼接(O(1) 更新)
- 大小寫/非 ASCII/空白字元處理策略

# Answer
## V1 - 直觀解
```Cpp
class Solution {
public:
// TODO: 實作
};
```

## V2 - 最佳化 / 模板化解
- 與 V1 差異:
- (例)由 map 改為定長陣列 256
- (例)自訂 key 正規化避免排序成本
```Cpp
class Solution {
public:
// TODO: 實作
};
```

# 邊界測資(最小集)
- 空輸入/單元素/全部相同/全部不同
- 超長字串或大數量元素
- 非法/稀有字元(若題意允許)

# 複雜度
- 時間:
- 空間:

# 二刷差異
- 本題二刷時要特別檢查:
- 與相似題的可複用片段:
44 changes: 44 additions & 0 deletions Backtracking/Template - Backtracking - Main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
ParentTask:
- "[[backtracking]]"
---

# Problem
[Title](URL)

# 模板與不變量
- 選擇 → 遞迴 → 撤銷(choose → recurse → unchoose)
- 去重策略:排序 + if(i>start && nums[i]==nums[i-1]) continue
- 訪問標記:原地標記 + 回溯還原

# Answer(模板)
## V1 - DFS(遞迴)
```Cpp
class Solution {
public:
// TODO: 回溯骨架,參數含路徑、索引、剩餘容量/長度等
};
```

## V2 - 迭代/優化(若適用)
- 與 V1 差異:狀態壓縮/位運算/剪枝
```Cpp
class Solution {
public:
// TODO: 優化版本
};
```

# 常錯點
- 忘記還原狀態(visited/路徑)
- 去重條件寫錯、起始索引管理錯誤

# 邊界測資
- 空集合/全重複/無解/單元素

# 複雜度
- 時間:依分支因子與深度估算
- 空間:遞迴深度與路徑儲存

# 二刷差異
- 最有效的剪枝與遞迴順序:
41 changes: 41 additions & 0 deletions BinarySearch/Template - Binary Search - Main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Problem
[Title](URL)

# 單調判定與區間定義
- 目標:找第一個/最後一個滿足條件的索引
- 區間:left, right 是否含端點;停止條件
- mid 計算:left + (right-left)/2

# Answer(模板)
## V1 - 找第一個滿足條件的索引
```Cpp
class Solution {
public:
// bool ok(X): 單調條件判定函數
// TODO: 二分骨架(偏左收斂)
};
```

## V2 - 特化到本題數學/結構
- 與 V1 差異:條件改寫為單調形式
```Cpp
class Solution {
public:
// TODO: 問題特化
};
```

# 常錯點
- 無窮迴圈(left/right 更新不對稱)
- 邊界越界、整數溢位
- 多條件判斷未先轉為單調布林

# 邊界測資
- 空/單元素/全部相等/嚴格遞增遞減/目標不存在

# 複雜度
- 時間:O(log n)
- 空間:O(1)

# 二刷差異
- 與 33/153/4 等題的單調化對齊點:
40 changes: 40 additions & 0 deletions Linked List/Template - Linked List - Main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Problem
[Title](URL)

# 常用模板與不變量
- Dummy Head + 三指針(prev/curr/next)
- fast/slow 找中點/環檢測;reverse 區間
- 合併鏈表:穩定性與引用操作順序

# Answer(模板)
## V1 - 指標操作骨架
```Cpp
struct ListNode { int val; ListNode* next; };
class Solution {
public:
// TODO: 建立 dummy, 初始化 prev/curr/next,按題目需求操作
};
```

## V2 - 優化/分治(若適用)
- 與 V1 差異:如分治合併、就地反轉區間
```Cpp
class Solution {
public:
// TODO: 優化寫法
};
```

# 常錯點
- 指標更新順序出錯導致遺失鏈
- 忘記連回 dummy 或尾端為 nullptr

# 邊界測資
- 空/單節點/兩節點/全部相等/已排序

# 複雜度
- 時間:
- 空間:

# 二刷差異
- 本題的關鍵步驟順序與易錯點:
41 changes: 41 additions & 0 deletions Sliding Window/Template - Sliding Window - Main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Problem
[Title](URL)

# Window 定義
- 窗口區間定義:左閉右閉 [l, r] 或 (l, r]
- 有效條件(不變量):何時視為包含所有需求(matchCnt 定義固定其一)
- 方案 A:matchCnt 代表字元「總數量」是否達標
- 方案 B:matchCnt 代表「字元種類」是否達標

# Answer(模板)
## V1 - HashMap 實作
```Cpp
class Solution {
public:
// TODO: s, t 兩側移動骨架:擴張 r -> 滿足 -> while 收縮 l -> 更新答案
};
```

## V2 - 固定長度陣列(256)最佳化
- 與 V1 差異:常數因子更小,避免 map 插入成本
```Cpp
class Solution {
public:
// TODO: 陣列計數 + matchCnt 驅動
};
```

# 常錯點
- 擴張時機與收縮時機寫反;更新答案的時點
- 無解處理:提前判斷 |s| < |t|
- 陣列大小統一用 256

# 邊界測資
- t 含重複字元、s 無解、s==t、t 為空

# 複雜度
- 時間:O(n)
- 空間:O(1) / O(字元集)

# 二刷差異
- 本題二刷要檢查的條件與錯誤縮減案例:
39 changes: 39 additions & 0 deletions Stack/Template - Stack - Main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Problem
[Title](URL)

# 模板與不變量
- 單調棧/單調隊列:維護遞增/遞減性
- 何時入棧、何時出棧、出棧時計算答案的區間定義
- 需要哨兵?左邊 -1、右邊 0 高度

# Answer(模板)
## V1 - 經典單調棧
```Cpp
class Solution {
public:
// TODO: 嚴格單調策略 + 出棧計算區間
};
```

## V2 - 邊界/哨兵優化
- 與 V1 差異:push(-1) 與 heights.push_back(0)
```Cpp
class Solution {
public:
// TODO: 哨兵優化版本
};
```

# 常錯點
- 相等高度如何處理(合併/忽略)
- 最後未清空棧導致漏算;空輸入初始值

# 邊界測資
- 空/全遞增/全遞減/大量相等

# 複雜度
- 時間:O(n)
- 空間:O(n)

# 二刷差異
- 出棧區間兩端定義與相等策略:
40 changes: 40 additions & 0 deletions Trees/Template - Trees - Main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Problem
[Title](URL)

# 模板與不變量
- 遞迴設計:返回值語義(本子樹能提供給父節點的資訊 vs. 全域答案)
- Top-down vs Bottom-up 的選擇
- 邊界:nullptr、INT_MIN/INT_MAX 溢位

# Answer(模板)
## V1 - DFS(遞迴)
```Cpp
struct TreeNode { int val; TreeNode* left; TreeNode* right; };
class Solution {
public:
// TODO: 明確回傳值語義,必要時使用 pair/struct
};
```

## V2 - 迭代/BFS(若適用)
- 與 V1 差異:序列化/層序/顯式 stack/queue
```Cpp
class Solution {
public:
// TODO: 迭代解
};
```

# 常錯點
- 忘記帶著上下界(BST 題);未用 long long 對界
- 混淆「可延伸至父」與「僅在本子樹生效」的值

# 邊界測資
- 空樹/單節點/全負/重複值/退化鏈

# 複雜度
- 時間:
- 空間:

# 二刷差異
- 這題與 98/230/124/297 的共通與差異:
38 changes: 38 additions & 0 deletions Two Pointers/Template - Two Pointers - Main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Problem
[Title](URL)

# 模板與不變量
- 何時移動左指標、何時移動右指標(由不變量決定)
- 排序前提 vs 原地掃描;碰撞、滑移、夾逼

# Answer(模板)
## V1 - 經典左右夾逼
```Cpp
class Solution {
public:
// TODO: l/r 根據不變量移動,更新答案
};
```

## V2 - 排序 + 雙指針(若適用)
- 與 V1 差異:排序後去重策略
```Cpp
class Solution {
public:
// TODO: 排序 + 去重 + 夾逼
};
```

# 常錯點
- 去重策略錯誤導致重複答案
- 結束條件(l<r vs l<=r)

# 邊界測資
- 空/單元素/全等/極端分佈

# 複雜度
- 時間:
- 空間:

# 二刷差異
- 與 11/15/167/42 的共通骨架: