< 返回筆記列表

瀏覽標記為 Blind 75 的 15 篇筆記。

#Blind 75

LeetCode 198:打家劫舍,用兩個狀態處理搶與不搶

記錄我的 House Robber 解法,拆解 p1、p2 為什麼可行,再改成狀態定義更清楚的 O(n) 時間、O(1) 額外空間版本。

LeetCode 70:爬樓梯,從重複遞迴到只保留前兩階

記錄我的 Climbing Stairs 解題過程,從排列組合誤區、指數時間遞迴,走到 O(n) 時間與 O(1) 額外空間的 rolling state。

LeetCode 152:最大乘積子陣列,為什麼最大值和最小值都要留下

記錄我的 Maximum Product Subarray 解題過程,從正負號分支改成 O(n) 的最大與最小雙狀態,並用反例、不變量及暴力比對說明正確性。

LeetCode 53:最大子陣列,從向左重算到保存上一輪結果

記錄我的 Maximum Subarray 解題過程,從 O(n²) 向左掃描改成 O(n),解釋 endingHere 與 best 的差別、全負數邊界與可執行測試。

LeetCode 238:除自身以外陣列的乘積,從除法改成前綴與後綴

記錄我寫的除法版與前綴、後綴乘積版,釐清多個零、更新順序、正確性,以及 O(1) 額外空間與 O(n) 輸出空間的差別。

LeetCode 15:TypeScript 3Sum,為什麼跳過重複值不會漏解

從全域 Set 的漏解問題,到排序與雙指標,再逐步說明 3Sum 的三個去重條件、正確性、複雜度與 assertions。

LeetCode 11:TypeScript 盛最多水的容器,為什麼要移動較矮的那端

保留我的雙指標解法,補上暴力解對照、捨棄較矮端點的正確性證明,以及 O(n) 時間與 O(1) 空間分析。

LeetCode 125:TypeScript Valid Palindrome,從清理字串到原地雙指標

保留先清理字串的雙指標解法,再說明 charCodeAt 版本如何原地跳過非英數字元。

LeetCode 424:TypeScript 最長重複字元替換,理解 sliding window 與歷史最高頻率

保留這次的 frequency-counting sliding window 解法,說明 maxFreq 為何可以不隨左指標倒退。

LeetCode 3:TypeScript 最長不重複子字串,從回退重掃到 sliding window

保留一次回退重掃的嘗試,說明為何最壞為 O(n²),再改為單次走訪的 Map sliding window。

LeetCode 49:TypeScript Group Anagrams,從排序 key 到計數簽名

整理 Group Anagrams 的排序分組解法,找出重複複製陣列的成本,並比較固定字元集的計數簽名。

LeetCode 347:TypeScript Top K Frequent Elements,從頻率排序到 bucket

先以 Map 計數後排序找出最高頻元素,再用 bucket 消除 O(n log n) 的排序成本。

LeetCode 242:TypeScript Valid Anagram,從排序到字元計數

比較排序、Map 計數與固定大小計數陣列,說明 Valid Anagram 的正確性、不變量與複雜度。

LeetCode 1:TypeScript Two Sum,用 Map 找出兩數索引

從兩層迴圈列舉配對,改用 Map 記錄先前值與索引,說明補數查詢、不變量與預期 O(n) 解法。

LeetCode 217:TypeScript Contains Duplicate,用 Set 判斷重複值

比較整個 Set 的大小與陣列長度,或在一次掃描中提早找出重複值,說明 Set 解法的正確性與預期 O(n) 複雜度。