Two Pointers常用在搜尋,他在一個給定的資料結構中做循環並給定兩個指針,用來解決編碼上的問題,常用在字串,陣列或鏈結串列 (Linked list)中。
此演算法可以幫助我們對某些資料結構做某種方式的排序,例如977. Squares of a Sorted Array或283. Move Zeroes等等,
而根據字串或陣列是否有排序,利用Two Pointers演算法,時間複雜度最差為O(n logn)更好為O(n)。
一個從頭開始,另一個從結尾
(圖片來自Basics of Two Pointers Technique)
利用leetcode167. Two Sum II - Input Array Is Sorted來做練習,這題題目會跟1. Two Sum有點相似,但作法有限制,廢話不多說先來看題目。
給定一個非降序排序的數組,需要找到哪兩個索引位置的值加起來會等於target,並將其索引位置加一數組返回[index1 + 1, index2 + 1]
1 <= index1 < index2 <= numbers.length利用Example 1來做分解
將上述圖解轉換成程式碼
977. Squares of a Sorted Array
557. Reverse Words in a String III
相同的方向但是一個速度慢一個速度快
(圖片來自Basics of Two Pointers Technique)
利用876. Middle of the Linked List做練習
給定一個鏈結串列,回傳一個鏈結串列的中間節點,假如有兩個中間節點則回傳第二個中間節點。
利用快慢指標解題
將上述圖解轉換成程式碼
19. Remove Nth Node From End of List
By. @joe94113