文章
- LeetCode 筆記 - 377. Combination Sum IV 給定數列求相加等於目標值的組合數量。由於數字可重複且順序不同視為不同組合,本文捨棄遞迴搜尋,改用效率更高的動態規劃(DP)策略。透過逐層累加子問題的解答,能在可接受的時間內精確算出龐大的組合總數。
- LeetCode 筆記 - 216. Combination Sum III 挑戰從數字 1 到 9 中找出特定長度且總和等於目標值的組合。本文利用深度優先搜尋(DFS)進行窮舉,透過遞迴探索與邊界剪枝,能高效地找出所有符合限制的數字組合。這是一篇掌握回溯(Backtracking)技巧的進階練習。
- LeetCode 筆記 - 40. Combination Sum II 針對包含重複元素的 Combination Sum II 問題,本文分享如何運用深度優先搜尋(DFS)找出相加等於目標值的所有組合。重點解析了透過排序與條件判斷來避免產出重複結果的關鍵技巧,幫助讀者在處理回溯演算法時掌握更精細的剪枝策略。
- LeetCode 筆記 - 39. Combination Sum 解析如何從數列中找出相加等於目標值的所有不重複組合,且數字可無限重複使用。本文教學使用深度優先搜尋(DFS)配合排序優化,透過剪枝技術跳過無效的分支,達成在廣大搜尋空間中精確搜集目標組合的目的。
- LeetCode 筆記 - 215. Kth Largest Element in an Array 如何在無序數列中找到第 k 大的元素?本文分析了局部選擇與全局排序的效能差異。在大規模數據下,適當的排序配合索引存取往往比多次選擇更具優勢。這是一篇關於演算法選擇與數據規模權衡的實務討論。
- LeetCode 筆記 - 1642. Furthest Building You Can Reach 要在建築間移動,如何最有效分配有限的磚塊與梯子?本文分享利用優先權隊列(Priority Queue/Heap)「改變過去」的策略:先將梯子用在每一次爬升,當梯子耗盡時再從堆積中找最小爬升高度換回磚塊。這是一篇關於貪婪演算法與堆積運用的優質筆記。
- LeetCode 筆記 - 820. Short Encoding of Words 探討如何針對單字清單建立最短的合法編碼。本文解析規則中字串包含的特性,分享先進行長度排序再依序比對後綴的優化策略。透過這套方案,能精確判斷哪些單字可被壓縮在其他單字中,達成節省存儲空間的編碼目標。
- LeetCode 筆記 - 62. Unique Paths 經典的棋盤路徑計數問題。本文利用動態規劃(DP)的核心思想,透過逐格加總左方與上方的走法數量,精確計算出從左上角抵達右下角的所有可能路徑。這是一篇適合掌握遞推關係式建立與基礎矩陣運算的演算法筆記。
- LeetCode 筆記 - 583. Delete Operation for Two Strings 挑戰找出將兩個字串刪減至完全相同所需的最少步數。本文將問題轉化為尋找「最長共同子序列」(LCS),並揭露總長度扣除兩倍 LCS 即為最小刪除次數的規律。透過結合動態規劃概念,能高效解決字串比對與編輯距離相關問題。
- LeetCode 筆記 - 1143. Longest Common Subsequence 解析經典的「最長共同子序列」問題。本文針對兩個字串的 LCS 運算,探討其在動態規劃中的實作邏輯。作為一個 NP-Hard 問題的簡化版,這是一篇理解字串比對、版本控制(如 git diff 原理)背後演算法思維的重要參考。
- LeetCode 筆記 - 120. Triangle 要求在數字三角形中尋找相加總和最小的路徑。解題思路結合了深度優先搜尋(DFS)與動態規劃(DP),透過記錄已探索過的子路徑結果來避免重複計算。本文分享如何透過記憶化搜索,將複雜路徑搜尋優化為高效的遞推過程。
- LeetCode 筆記 - 1695. Maximum Erasure Value 挑戰尋找不含重複元素且總和最大的子數列。本文結合滑動視窗(Sliding Window)與哈希表(Hash Map)來動態調整搜尋範圍,並配合前綴和技術加速區間加總。這是一篇展示如何組合多種經典技巧來解決複合型問題的開發筆記。
- LeetCode 筆記 - 1658. Minimum Operations to Reduce X to Zero 尋找從兩端移除元素使總和等於 x 的最小步驟。本文分享一個逆向思考的小技巧:將問題轉化為尋找總和為「總數 - x」的最長連續子陣列。結合前綴和與雙指針技術,能讓這個看似複雜的兩端搜尋問題變得易於實作。
- LeetCode 筆記 - 1332. Remove Palindromic Subsequences 挑戰清空僅包含 a 與 b 的字串。由於移除規則允許一次刪除所有符合條件的「迴文子序列」,本文揭露了一個驚人的簡化邏輯:若原字串非迴文,最多只需兩步(先刪除所有 a,再刪除所有 b)即可清空。這是一篇強調審題與邏輯簡化重要性的筆記。
- Python - How to list all the files 在 Python 開發中,遞迴列出目錄及子目錄下的所有檔案是常見需求。本文分享如何使用內建的 glob 模組,透過簡潔的通配符語法快速取得完整檔案清單。這是一篇掌握檔案系統操作與目錄遍歷技巧的實用技術隨筆。
- LeetCode 筆記 - 160. Intersection of Two Linked Lists 挑戰尋找兩個鏈結串列的交會點。本文特別介紹神奇的「龜兔賽跑演算法」(Floyd Cycle Detection Algorithm),展示如何透過精巧的指標移動邏輯,在不需要額外空間的情況下,偵測出結構中的環或交會節點,是一篇探討指針美學的深度心得。
- Mac - 如何用程式發出本機系統通知 分享如何在 Mac 系統中使用程式碼觸發系統通知(System Notification)。對於需要執行長時間程序的使用者,本文提供一套自動化提醒方案,讓程式在任務結束後主動通知開發者,有效節省等待時間並提升工作流程效率。
- LeetCode 筆記 - 303. Range Sum Query - Immutable 解析如何在靜態數列中快速進行多次區間總和查詢。本文介紹「前綴和」表格的建立與運算公式:透過預先計算累積和,讓每次查詢都能在 O(1) 時間內完成。這是一個優化重複性查詢需求的經典演算法實作範例。
- LeetCode 筆記 - 304. Range Sum Query 2D - Immutable 將前綴和概念延伸至二維矩陣。本文引導讀者建立 2D Prefix Sum 表格,透過計算矩形區域的加減邏輯,達成任意子矩形總和的瞬間查詢。這是一篇掌握空間索引與高效率矩陣運算的高階技術分享。
- LeetCode 筆記 - 867. Transpose Matrix LeetCode 矩陣轉置實作練習。本文教學如何將 2D 矩陣的行與列進行互換,是一篇關於矩陣基本操作與巢狀迴圈索引處理的基礎筆記。內容簡潔直觀,適合初學者鞏固對多維陣列結構的理解。
- LeetCode 筆記 - 1461. Check If a String Contains All Binary Codes of Size K 判定二進位字串是否包含所有長度為 k 的可能組合。本文分享利用集合(Set)存儲所有子字串的策略,並透過檢查集合長度是否達到 2^k 來快速得出結論。這是一篇掌握字串切片、集合運算與二進位組合邏輯的實用筆記。
- LeetCode 筆記 - 1480. Running Sum of 1d Array 解析「前綴和」(Prefix Sum)演算法的基礎應用。透過將數列中的每一項更新為前面所有項的累積和,能為後續的區間查詢提供極大的效率。本文透過這題簡單的實作,幫助讀者建立處理連續數列加總問題的核心思維。
- LeetCode 筆記 - 29. Divide Two Integers 實作不使用乘法與除法運算子的兩數相除。解題關鍵在於處理位元移位或連續減法,並特別關注整數溢位(Overflow)的邊界條件。這是一篇探討計算機底層運算邏輯與數值安全性處理的技術隨筆。
- LeetCode 筆記 - 318. Maximum Product of Word Lengths 尋找不含相同字母的兩字串最大長度乘積。本文利用位元運算(Bitwise)進行加速,將字串的字母分佈壓縮成一個整數,透過 AND 運算即可秒速判斷是否有重複字母。這展示了位元技巧在優化字串比對任務上的強大威力。
- LeetCode 筆記 - 268. Missing Number 在一個連續數列中找出缺少的那個數字。本文提供排序後線性掃描的直覺解法。雖然簡單,但它引導開發者思考如何透過數據結構的有序性來快速定位異常點,是處理數據完整性檢查的基礎訓練。
- LeetCode 筆記 - 1342. Number of Steps to Reduce a Number to Zero 一題簡單直覺的模擬練習,要求計算將數字減少到零的步驟數(偶數除以二,奇數減一)。雖然邏輯單純,但它是訓練基礎程式邏輯與迴圈控制的好範例。本文提供直接且高效的實作方式,適合演算法入門練習。
- LeetCode 筆記 - 191. Number of 1 Bits 計算整數二進位表示中 1 的個數(漢明重量)。本文除了介紹基礎的位元轉換方法,更分享了目前已知最快速的演算法:利用 x & (x-1) 技巧快速移除最低位的 1,極大地優化了位元運算效率,是位元處理領域的必學技巧。
- LeetCode 筆記 - 32. Longest Valid Parentheses 挑戰尋找最長的合法括號字串長度。本題在基礎堆疊(Stack)應用的基礎上,進一步分享如何動態累積配對成功的長度。這是一個進階的資料結構應用練習,能幫助開發者掌握處理複雜嵌套結構時的長度追蹤邏輯。
- LeetCode 筆記 - 20. Valid Parentheses 解析如何判定括號字串的合法性。本文利用堆疊(Stack)先進後出的特性,當遇到左括號時壓入,遇到右括號時彈出並檢查是否成對。這是一個理解堆疊資料結構在處理巢狀結構(如編譯器解析)中扮演關鍵角色的經典範例。
- LeetCode 筆記 - 566. Reshape the Matrix 實作 MATLAB 著名的 reshape 函式。本文教學如何將矩陣資料依照指定的維度重新排列,並強調在執行操作前驗證新長寬是否符合原始資料規模的重要性。這是一個理解 2D 矩陣索引映射與基本資料轉換邏輯的實用練習。