文章目錄
- 雙指針介紹
- 對撞指針
- 快慢指針
- 283. 移動零
- 解題思路
- 算法思路
- 算法流程

雙指針介紹
? 算法中的雙指針,并不一定是指我們平常在 c/c++
使用的指針類型,更多時候其實是數組的下標等,因為它們也是有標識某個元素的功能,通常我們也就順其自然地稱其為 “指針” !
? 常見的雙指針有兩種形式,一種是對撞指針,一種是快慢指針。
對撞指針
? 一般用于順序結構中,也稱為左右指針。對撞指針 從兩端向中間移動。一個指針從最左端開始,另一個從最右端開始,然后逐漸往中間逼近。
? 對撞指針的 終止條件一般是兩個指針相遇或者錯開(也可能在循環內部找到結果直接跳出循環),也就是:
left == right
(兩個指針指向同一位置)left > right
(兩個指針錯開)
快慢指針
? 又稱為龜兔賽跑算法,其基本思想就是 使用兩個移動速度不同的指針在數組或鏈表等序列結構上移動。這種方法對于處理環形鏈表或數組非常有用!
? 其實不單單是環形鏈表或者是數組,如果我們要研究的問題出現循環往復的情況時,均可考慮使用快慢指針的思想。快慢指針的實現方式有很多種,最常用的一種就是:
- 在一次循環中,每次 讓慢的指針向后移動一位,而 快的指針往后移動兩位,實現一快一慢。
283. 移動零
283. 移動零
? 給定一個數組 nums
,編寫一個函數將所有 0
移動到數組的末尾,同時保持非零元素的相對順序。
?