玩转双指针

Posted 小猴子_X

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转双指针相关的知识,希望对你有一定的参考价值。

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

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

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

 

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

 

 其他场景:

  

 

 二.快慢指针

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

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

 

 

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

 

模拟的环形链表

 

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

 

 三.滑动窗口

正向滑动窗口

 

 

反向滑动窗口 

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

 

 

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

以上是关于玩转双指针的主要内容,如果未能解决你的问题,请参考以下文章

C语言进阶玩转指针——指针的高阶玩法!

Oracle 11gR2 RAC 单网卡转双网卡绑定配置步骤

江哥带你玩转C语言 | 13- 一级指针和多级指针

6个简例带你你玩转Golang指针

算法双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )

☀️☀️☀️不会还有人学不会C语言中的指针和数组吧?Chris带你走进并玩转指针与数组的世界☀️☀️☀️