LeetCode 筆記 - 350. Intersection of Two Arrays II
延續 349 題的交集概念,本題要求保留重複出現的元素。解題核心同樣採用排序後配合雙指針(Two Pointers)的策略,但在匹配成功時不進行去重處理,而是直接記錄結果,協助讀者理解相同演算法在不同限制下的細微調整。
延續 349 題的交集概念,本題要求保留重複出現的元素。解題核心同樣採用排序後配合雙指針(Two Pointers)的策略,但在匹配成功時不進行去重處理,而是直接記錄結果,協助讀者理解相同演算法在不同限制下的細微調整。
找出兩個數列中重複的元素,且結果不包含重複值。本文介紹先將數列轉換為集合(set)以去除冗餘,再透過排序後利用雙指針(Two Pointers)進行同步掃描的策略。這種方法能確保在 O(N) 時間內精確找出交集元素。
判定字串 s1 的排列組合是否出現在 s2 中。本文捨棄窮舉所有排列,轉而利用滑動視窗(Sliding Window)配合計數器(Counter)追蹤字元出現頻率。這種策略能大幅降低計算成本,在線性時間內完成子字串的頻率比對。
要求計算字串中所有迴文子字串的數量。本文再次運用強大的 Manacher 演算法,利用其對稱特性將時間複雜度優化至 O(N)。文中詳述如何透過演算法產出的迴文半徑推導出最終數量,是一篇探討進階迴文處理技巧的筆記。
挑戰合併兩個已排序的數列。本文解析歸併排序(Merge Sort)的核心邏輯,透過比較兩數列首位元素依序放入結果中。文中特別分享 Python 內直接修改記憶體位置的語法技巧,達成原地合併且不浪費額外空間。
解析經典的零錢兌換問題。本文探討如何運用動態規劃(Dynamic Programming)建立遞迴關係式,透過查表法記錄組合出每個目標金額所需的最少錢幣數量。這是一個理解 DP 如何將大問題分解為子問題並重複利用結果的優質範例。
解析如何實作具備最近最少使用(LRU)機制的快取系統。本文探討 Python 中 OrderedDict 的應用,並分享一個提升字典鍵值檢查效率的「奇技淫巧」,顯著優化執行速度。這是一篇兼具資料結構原理與 Python 效能優化的心得。
挑戰四數之和問題。為了避免陷入 O(N^4) 的暴力解陷阱,本文介紹將問題拆解為兩兩組合並利用字典(dict)儲存結果的 O(N^2) 優化策略。配合排序後的跳過重複計算技巧,能在大規模數據下保持優異的執行效能。
在有障礙物的地圖中尋找機器人的唯一路徑數量。這是一個標準的動態規劃(DP)問題,本文解析如何透過加總格位左方與上方的路徑數來動態遞推結果。文中特別強調障礙物處理與起點初始化的關鍵細節。
尋找鏈結串列的中間節點。本文運用經典的快慢指針(Two Pointers)大法,透過快指針每次移動兩步、慢指針移動一步的速差,讓慢指針在遍歷結束時精確停在中間位置,是一篇展示指針技巧如何優化遍歷效能的範例。