雙指針技巧 —— 情景一
在前一章中,我們通過迭代數組來解決一些問題。通常,我們只使用從第一個元素開始並在最後一個元素結束的一個指針來進行迭代。 但是,有時候,我們可能需要同時使用兩個指針
來進行迭代。
示例
讓我們從一個經典問題開始:
反轉數組中的元素。
其思想是將第一個元素與末尾進行交換,再向前移動到下一個元素,並不斷地交換,直到它到達中間位置。
我們可以同時使用兩個指針來完成迭代:一個從第一個元素開始
,另一個從最後一個元素開始
。持續交換它們所指向的元素,直到這兩個指針相遇。
以下代碼可以供你參考:
C++的:
void reverse(int *v, int N) {
int i = 0;
int j = N - 1;
while (i < j) {
swap(v[i], v[j]);
i++;
j--;
}
}
Java 的:
public static void reverse(int[] v, int N) {
int i = 0;
int j = N - 1;
while (i < j) {
swap(v, i, j); // this is a self-defined function
i++;
j--;
}
}
總結
總之,使用雙指針技巧的典型場景之一是你想要
從兩端向中間迭代數組。
這時你可以使用雙指針技巧:
一個指針從始端開始,而另一個指針從末端開始。
值得注意的是,這種技巧經常在排序
數組中使用。