玩转双指针

双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。 常见的双指针有三种。

  • 左右指针:两个指针指向同一数组,但是遍历方向相反,常用作搜索排序数组的两个符合条件的数,以及其他特殊情况。
  • 快慢指针:两个指针指向同一数组,遍历方向相同,fast指针快,slow慢。然后它俩同时向前移动,初始的时候相隔一定的距离,这个距离一般由题意选择。用在特殊链表
  • 滑动窗口:两个指针指向同一数组,遍历方向相同且不会相交(两个指针包围的区域即为当前的窗口),经常用于区间搜索
一.左右指针

搜索排序数组(基础版):

 

 搜索排序数组(升级版):

 

 其他场景:

  

 

 二.快慢指针

 链表倒数第k个节点:快指针先走n步,然后和慢指针每次移动1位

  其他方法:遍历所有节点,求第count - k个节点;反转链表;放入栈中;

 

 

 环形链表:快指针和慢指针在同一个位置,但是快指针每次移动2步,慢指针每次移动1位

 

模拟的环形链表

 

 回文链表:其他方法:把链表遍历放在一个数组中,使用左右指针比较。缺点:空间复杂度O(n)

 

 三.滑动窗口

正向滑动窗口

 

 

反向滑动窗口 

 特殊滑动窗口:需要的元素不是窗口内的元素,而是窗口的左右边界

 

 

 寄语:读一些无用的书,做一些无用的事,花一些无用的时间,都是为了在一切已知之外,保留一个超越自己的机会。

posted @ 2022-01-17 00:41  小猴子_X  阅读(105)  评论(0编辑  收藏  举报