最近做题遇到很多问题,绞尽脑汁才做出来,但是一搜发现有很多题目使用双指针是非常简单的。于是下定决心,看看双指针是个什么鬼。
网上的说法很通俗易懂,就是两个指针,一个指针走的快,叫快指针,一个指针走的慢,叫慢指针。那么一个快,一个慢,有什么用呢?
我自己思考了下,这种思路用在去除满足条件的元素中非常有用,比如leetcode中的去除相同元素。
(1)快指针在前面扫描有没有符合的元素,若没有,则慢指针(统计不符合条件个数)加一,并将当前快指针的元素赋给慢指针(因为慢指针的元素已经扫描过了,改变不影响快指针的扫描)。否则,什么都不做。最后只需要返回慢指针扫描过的地方就好了。
(2)相比于新建一个数组,将扫描过后不符合条件的元素转移到新建数组,然后再将新建数组赋给元素组,这种方法的优势在于一个在扫描,另一个可以直接完成新建数组,赋给原数组的工作,只是原数组的大小没有改变,需要慢指针记录符合条件的个数。