这几天在看双指针算法。
双指针是指在遍历对象的过程中,不是使用单一的指针进行操作,而是使用两个指针进行操作,进而实现目的。
双指针算法可以分为两类:1、快慢指针,2、碰撞指针(又可以说出成是左右指针),
1.快慢指针就是在相同方向的指针进行操作,只不过一个快一个慢,比如var 定义两个变量,one、two,然后每次one增长两个,two每次增加一个。直到满足相对应的条件,这就是快慢指针。
2.对撞指针就是在相反方向的指针进行操作,比如var定义两个变量left,right,然后一个从最左边开始增长,另一个从最右边开始递减,然后向中间进行操作,这就是对撞指针。
例似的题我最近正在做,比如这一题:反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符
然后这一道题就可以使用对撞指针来实现这个效果。代码如下:
var reverseString = function (s) {
var q = 0, p = s.length - 1
while (q < p) {
[s[q], s[p]] = [s[p], s[q]];
q++;
p--;
}
return s;
}
console.log(
reverseString(["h", "e", "l", "l", "o", "w", "o", "q"])
);
这就是实现效果了,这是使用双指针实现的。
当然,最简单的就是使用reverse()方法直接颠倒字符串也就可以了,简单也省事......