雙指標解題思路
阿新 • • 發佈:2019-01-01
刷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節點