当前位置:   article > 正文

『算法』——双指针算法——快慢指针/对撞指针/滑动窗口(快慢指针的一种)_算法 双指针和快慢指针的关系

算法 双指针和快慢指针的关系

引言

什么是双指针

\quad \quad 严格的来说,双指针只能说是是算法中的一种技巧。双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。

\quad \quad 双指针算法在一些数组题中很常用,双指针算法有两种形式,一种被称为对撞指针,两个指针从两端向中间靠拢;另一种是快慢指针,两个指针向统一方向运动,滑动窗口方法就是一种常用的快慢指针方法。

  • 快慢指针:主要是成环问题
  • 对撞指针:数组和字符串问题
  • 滑动窗口:主要是子串问题

双指针问题套路

\quad \quad 通俗的说,就是在数组遍历中,我们使用两个指针进行操作。所以双指针问题基本有以下几个细节:

1、双指针的初始位置。

2、双指针的移动方法。

3、遍历的结束条件。

1、对撞指针

见解

\quad \quad 对撞指针是双指针的一种。对撞指针是指在有序数组中,将指向最左侧的索引定义为左指针(left),最右侧的定义为右指针(right),然后从两头向中间进行数组遍历。对撞数组适用于有序数组,也就是说当你遇到题目给定有序数组时,应该第一时间想到用对撞指针解题。

可解决问题类型

\quad \quad 对撞指针算法,可以用来解决有序数组中的数字之和,反转数组等之类的具有可以两边开工的一些问题。

求解的步骤与模板

\quad \quad 我们假设数组名字为 nums,数组长度为 n,数组首元素对应的位置为 0。

代码细节
(1)指针初始位置

  • 左指针(left)一般指向数组的第一个元素。即 left = 0。

  • 右指针(right)一般指向数组的最后一个元素。即 right = len-1。

(2)指针移动方法

  • 左指针(left)向右边

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/615397
推荐阅读
相关标签