In-Place Techniques - Structure vs Operations
in-place 演算法:只用"常數級額外空間"來完成工作,主要直接修改原本的輸入資料結構。
| 資料結構 \ 操作 | 刪除 | 過濾 | 壓縮 | 重排 | Partition | 反轉 | 標記(index) | 合併 | 狀態壓縮 |
|---|---|---|---|---|---|---|---|---|---|
| Array | ✅ overwrite | ✅ two pointers | ✅ run-length | ✅ sort / permute | ✅ Dutch flag | ✅ swap | ✅ index as hash | ⚠️(從尾巴) | ✅ rolling |
| String | ⚠️(通常轉 char[]) | ✅ skip invalid | ✅ encoding | ✅ word reorder | ❌ | ✅ reverse | ❌ | ❌ | ❌ |
| Linked List | ✅ pointer skip | ✅ pointer filter | ❌ | ✅ reorder list | ❌ | ✅ reverse | ❌ | ✅ merge lists | ❌ |
| Binary Tree | ⚠️(需重接) | ❌ | ❌ | ❌ | ❌ | ⚠️(結構轉換) | ❌ | ❌ | ⚠️(Morris) |
LeetCode 對應題號:
| 資料結構 \ 操作 | 刪除 | 過濾 | 壓縮 | 重排 | Partition | 反轉 | 標記(index) | 合併 | 狀態壓縮 |
|---|---|---|---|---|---|---|---|---|---|
| Array | 27, 26, 80 | 283 | 443 | 31, 905, 922 | 75 | 344, 189, 48 | 41, 448, 442, 73 | 88 | 198, 213 |
| String | 1047 | 125 | 443 | 151 | — | 344, 345, 541, 557, 917, 151 | — | — | — |
| Linked List | 203 | 82, 83 | — | 143, 24 | — | 206, 92, 25 | — | 21, 23 | — |
| Binary Tree | 450 | — | — | — | — | 226 | — | — | 94(Morris) |