主要的方法有:
對於單個陣列的雙指標,特別的頭尾指標,特別對於排序陣列,或者其他情況。主要的目的是,不同的情況,只有乙個指標移動,而且兩個指標移動方向相對,指標最後對撞,遍歷結束。(比如,15.三數之和的問題,11.盛最多水的容器,75. 顏色分類,881. 救生艇。)
對於兩個陣列,特別是字串的比較問題。多是在每乙個字串有乙個指標,總共兩個指標。這種問題主要考慮指標是從頭開始,還是從尾部開始,多數有趣的題是從尾部開始。(比如,844. 比較含退格的字串,面試題10.01 合併排序的陣列,面試題17.11. 單詞距離)
鍊錶的雙指標,這個是比較套路的問題,常見的有鍊錶反轉、倒數第k個節點的尋找、快慢指標等。(比如,234. 回文鍊錶,19. 刪除鍊錶中的倒數第n個節點,141. 環形鍊錶,142.環形鍊錶ii,457. 環形陣列迴圈。)在鍊錶中使用多指標,特別是涉及節點位置改變的時候,需要注意特殊情況下指標之間的相鄰等情況,比如 面試題 02.04. 分割鍊錶
雜湊表的使用,對於一些尋找陣列或者字串中符合特定運算指標的元素,這種問題非常適合用雜湊表來解決,可以實現o(n)級別的時間複雜度。特別的,對於涉及連續子串和,特定型別資料個數的問題,可能使用字首和結合雜湊。(比如,1248. 統計優美子陣列,1658. 將x減到0 的最小運算元。)
5.滑動視窗,經典的雙指標問題,主要用來解決尋找滿足某一條件的連續子串問題。左右指標維護乙個視窗,右指標往右視窗擴大,左指標往右視窗滑動。(比如,424. 替換後的最長重複字元,1004. 最大連續1的個數 iii)
相鄰指標,面試題17.11 單詞距離,面試題16.06. 最小差,分別在兩個有序列表中各自維護乙個指標,逐步更新指向較小值的指標。 (等同於先將兩個有序列表合併為乙個大的有序了列表,在同乙個有序列表中維護了兩個指標,使該兩個指標之間的距離盡可能小)。有乙個類似的題目:632. 最小區間,這個是很多個列表,各自維護乙個指標,更新時向右移動指向的數最小的指標。
迴圈陣列,在原有列表基礎上再串聯乙個原有列表+迴圈週期。這樣可以實現和列表完全相同的滑動移動。如題1610. 可見點的最大數目
困難題,解題思路比較特別的:
(1)992. k 個不同整數的子陣列
題解:(2)30. 串聯所有單詞的子串
題解:(3)面試題 17.21. 直方圖的水量 這個是完全看別人**寫的, **很簡潔
(4)828. 統計子串中的唯一字元
這道題的解法也非常巧妙,題解:
leetcode雙指標總結
雙指標一般又分為3中應用 判斷鍊錶是否有環 一快一慢 f和 s 相遇的話就是 成環 沒有相遇就是沒成環 判斷鍊錶中環的起點 鍊錶中證明了 f指標一定比慢指標多走n圈環的長度 f s nb f 2 s 可以得到 s nb 這個時候 如果再走鍊錶起點到環起點的a步的話 也就是 環的起點 所以我們用f指標...
雙指標法LeetCode總結
遍歷物件的過程中,使用兩個指標進行操作,實現相應的目的 經典環形鍊錶 leetcode142 待補充適用於有序陣列,設定陣列左索引與陣列右索引 基本流程是 publicf int nums leetcode11 盛水最多的容器 class solution return max leetcode15...
leetcode之雙指標總結(C )
雙指標一般是快慢指標向後移動,或者左右指標向中間移動。雙指標 雙指標法的判定條件都是while left下面是力扣1 150中雙指標的題 9.回文數 11.盛最多水的容器 15.三數之和 16.最接近的三數之和 18.四數之和 26.刪除排序陣列中的重複項 27.移除元素 31.下乙個排列 42.接...