2 Oppsite

left指针指向index零,right指针指向index长度减一

常用于字符串反转/排序数组等等,经典题目有灌水/反转/2-Sum/数组划分

相向双指针,指的是在算法的一开始,两根指针分别位于数组/字符串的两端,并相向行走。如我们在小学的时候经常遇到的问题:

小明和小红分别在铁轨A站和B站相向而行,小红的速度为 1m/s, 小明的速度为 2m/s,A站和B站相距 1km。 请问 ...

一个典型的相向双指针问题就是翻转字符串的问题。如三步翻转法,就是一个典型的例子。

用 while 循环的写法:

public void reverse(char[] s) {
    int left = 0, right = s.length - 1;
    while (left < right) {
        char temp = s[left];
        s[left] = s[right];
        s[right] = temp;
        left++;
        right--; 
    }
}

用 for 循环的写法:

public void reverse(char[] s) {
    for (int i = 0, j = s.length - 1; i < j; i++, j--) {
        char temp = s[i];
        s[i] = s[j];
        s[j] = temp;
    }
}

Last updated