1. 程式人生 > >雙指標解題思路

雙指標解題思路

刷leetcode一個月之後,發現就跟高中刷題一樣,單純的刷,到一定程度就上不去了,必須對題目進行收集和整理才能有更高的突破。

一.概念

快慢指標

快指標在每一步走的步長要比慢指標一步走的步長要多。快指標通常的步速是慢指標的2倍。
在迴圈中的指標移動通常為:
faster = faster.next.next; slower = slower.next;

首尾(大小)指標

首尾指標是指對陣列進行排序之後,設定在陣列的首和尾的位置,由於能夠保證陣列的順序,所以可以比較大小對兩個指標進行移動

區域指標

區域指標,是指在尋找某個區域的時候,通過設定兩個前後指標的移動,構成符合題目要求的區域,多用於尋找字串,

二.應用(相關題目)

首尾(大小)指標

  • threesum

區域指標

  • Longest Substring Without Repeating Characters

三.注意

通常需要特別留意連結串列長度的奇偶性
如果快指標步速為慢指標步速2倍,迴圈條件為:faster.next!=null && faster.next.next!=null
當自行設定快指標步長時, 要考慮步長值等於連結串列長度的特殊情況
查詢倒數第n個時,如果要求刪除連結串列元素時,不要忘記記錄應被刪除元素的前一個元素
對於連結串列的題目,常常都會用到Two Pointers的思想。連結串列注意構建dummy頭結點。在Java中,由於沒有free函式,所以在刪除一個節點的時候,無法用node = null來刪除一個節點,需要用前一個節點來指向刪除節點的下一個prev.next = node.next這樣來刪除node節點

參考內容:https://www.cnblogs.com/byrhuangqiang/p/4708608.html