双指针

概念:

  双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。

摘抄自力扣题解:

  当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法,将枚举的时间复杂度从 O(N^2) 减少至 O(N)。为什么是 O(N)呢?这是因为在枚举的过程每一步中,「左指针」会向右移动一个位置(也就是题目中的 bb),而「右指针」会向左移动若干个位置,这个与数组的元素有关,但我们知道它一共会移动的位置数为 O(N),均摊下来,每次也向左移动一个位置,因此时间复杂度为 O(N)。

 

力扣题目:

11-盛水最多的容器

15-三数之和

16-最接近的三数之和

18-四个数之和

19-删除链表的倒数第N个节点   --> 快慢指针,看题解

。。。

在上面的这些题目中,如果不使用双指针直接遍历的话,时间复杂度为O(n^2),而如果使用双指针从两侧分别向中间移动,则时间复杂度可以降低为O(n)。

对于15/16,首先对数组进行排序然后再查找。

参考:

https://leetcode-cn.com/problems/3sum/solution/san-shu-zhi-he-by-leetcode-solution/

https://zhuanlan.zhihu.com/p/71643340

https://zhuanlan.zhihu.com/p/95747836

posted @ 2020-11-13 16:42  adfas  阅读(191)  评论(0编辑  收藏  举报