随笔16-双指针算法

这几天在看双指针算法

双指针是指在遍历对象的过程中,不是使用单一的指针进行操作,而是使用两个指针进行操作,进而实现目的。

双指针算法可以分为两类: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()方法直接颠倒字符串也就可以了,简单也省事......

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。