文章目录

  • 一、双指针介绍
  • 二、相向双指针
    • 1. n sum类型
    • 2. 其他类型
  • 三、同向双指针—快慢指针
  • 四、同向双指针—滑动窗口
    • 1.固定窗口大小
    • 2.可变窗口
  • 五、分离双指针

一、双指针介绍

  所谓双指针算法,就是指的是在遍历的过程中,不是普通的使用单个指针进行循环访问,而是使用两个相同方向或者相反方向的指针进行扫描,从而达到相应的目的。双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算,降低时间复杂度。根据问题类型,双指针算法可分为:

  1. 相向双指针—对撞指针
  2. 同向双指针—快慢指针
  3. 同向双指针—滑动窗口
  4. 分离双指针

二、相向双指针

  所谓相向双指针是指在有序数组中,将指向最左侧的索引定义为左指针(Ieft),最右侧的定义为右指针(right),然后从两头向中间进行数组遍历。通俗点来说,就是指针在两边,往中间撞。

重点是有序数组,对于未排序数组,需要先排序

接下来,将使用对撞指针来解Leetcode题

1. n sum类型

Leetcode—5.n sum 问题python解答

2. 其他类型

11. 盛最多水的容器
611. 有效三角形的个数
125.判断是否为回文字符串
344. 反转字符串
345. 反转字符串中的元音字母

三、同向双指针—快慢指针

  快慢指针是两个指针从同一侧开始遍历数组,将这两个指针分别定义为快指针(fast)和慢指针(slow) ,两个指针以不同的策略移动,直到两个指针的值相等(或其他特殊条件)为止,如fast每次增长两个,slow每次增长一个。简单来讲,可理解为一个跑的快的人和一个跑的慢的人在一个圆形的赛道上赛跑,在某个时刻,跑得快的人一定会从后面赶上跑得慢的人。快指针fast一次走两步,慢指针slow一次走一步,最终会相遇在环中的某个位置(最小公倍数)。
26. 删除有序数组中的重复项
27. 移除元素
27. 移除元素—进阶
80. 删除有序数组中的重复项 II
283. 移动零
845. 数组中的最长山脉

四、同向双指针—滑动窗口

  有些时候,我们需要获得数组或者字符串的连续子部分,这时候我们就可以考虑使用滑动窗口。nums[left,right]为滑动窗口,根据具体的要求,通过遍历的时候来改变 left和right 的位置,从而完成任务。滑动窗口主要处理连续问题,按类型主要有如下三种:

固定窗口大小
窗口大小不固定,求解最大的满足条件的窗口
窗口大小不固定,求解最小的满足条件的窗口

1.固定窗口大小

对于固定窗口,我们只需要固定初始化左右指针Ieft和right,分别表示的窗口的左右顶点,并且保证:
Ieft初始化为0,初始化right,使得right -Ieft+1等于窗口大小,同时移动Ieft和right,判断窗口内的连续元素是否满足题目限定的条件。如果满足,再判断是否需要更新最优解,如果需要则更新最优解。如果不满足,则继续。

239. 滑动窗口最大值

2.可变窗口

对于可变窗口,我们同样固定初始化左右指针,分别表示的窗口的左右顶点。后面有所不同,我们需要保证:
1、Ieft和right都初始化为0
2、right指针移动一步
3、判断窗口内的连续元素是否满足题目限定的条件
3.1如果满足,再判断是否需要更新最优解,如果需要则更新最优解。并尝试通过移动Ieft指针缩小窗口大小。循环执行3.1
3.2如果不满足,则继续。

209. 长度最小的子数组
713. 乘积小于K的子数组
904. 水果成篮

五、分离双指针

  输入是两个数组/链表,两个指针分别在两个容器中移动;根据问题的不同,初始位置可能都在头部,或者都在尾部,或一头一尾。

350. 两个数组的交集 II
349. 两个数组的交集


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!


数据结构与算法python—3.数组(顺序表)双指针Leetcode刷题总结相关推荐

  1. 数据结构与算法(8-1)顺序表查找及优化

    目录 一.顺序表查找 二.顺序表查找优化(重点) 总代码 一.顺序表查找 从头到尾或从尾到头查找. //顺序表查找(需要判断两次) int ListSearch(char ch) {for (int ...

  2. 《数据结构与算法Python语言描述》习题第二章第二题(python版)

    ADT Date: #定义日期对象的抽象数据类型 Date(self, int year, int month, int day) #构造表示year/month/day的对象 difference( ...

  3. 数据结构与算法python语言描述答案_《数据结构与算法Python语言描述》习题第二章第一题(python版)...

    1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 4 """ 5 定义一个表示时间的类Time6 a)Time(hour ...

  4. 一个算法笨蛋的12月leetCode刷题日记

    类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...

  5. C#LeetCode刷题-分治算法

    分治算法篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  6. C#LeetCode刷题-哈希表

    哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串   24.2% 中等 18 四数之和   ...

  7. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  8. Python中的顺序表

    Python中的顺序表 Python中的list和tuple两种类型采用了顺序表的实现技术,具有顺序表的所有性质. tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方 ...

  9. 《数据结构与算法 Python语言描述》 读书笔记

    已经发布博客 <数据结构与算法 Python语言描述> 读书笔记 第二章 抽象数据类型和Python类 2.1 抽象数据类型abstract data type:ADT 2.1.1 使用编 ...

  10. 数据结构个人笔记 第三课 顺序表和单链表

    数据结构个人笔记 第三课 顺序表和单链表 顺序表的基本操作 插入元素 删除元素 顺序表查找元素 顺序表更改元素 本节总结代码 单链表 链表的节点 头节点.头指针和首元结点 链表的创建(初始化) 本节总 ...

最新文章

  1. Linux(ubuntu)下安装JDK
  2. python:使用PyInstaller打包成exe文件,以及TypeError: an integer is required (got type bytes)异常解决
  3. c++ substr截取中间部分字符串_杭电OJ 字符串处理类部分题解
  4. 百度模糊搜索怎么实现_百度搜索广告是什么?百度搜索竞价广告投放推广效果怎么样?...
  5. java date转sql date_java.util.Date和java.sql.Date转换(转)
  6. php传递参数给asp.net,asp.net 传值总结
  7. php文章自动采集器,使用php蓝天采集器抓取今日头条ajax的文章内容
  8. UGUI 屏幕适配 导致 BoxCollider无效 解决记录
  9. php7 memcached dll,php7.1和7.2的memcache.dll文件
  10. 00 后程序员征战国际,如何拿下计算机领域的奥林匹克?
  11. 8 天扩容超 100 万核,腾讯会议正在刷新历史
  12. 5.2.1 标准原子类型
  13. 51nod-1093:骆驼和香蕉
  14. 支付弹出php,PHP微信公众号支付弹出“NaN:undefined”解决方法
  15. Ubuntu18.04配置ORB SLAM3
  16. c语言斐波那契数列_母函数——斐波那契数列通项公式
  17. DAY11:尚学堂高琪JAVA(116~118)
  18. The NPF driver isn't running. You may have trouble capturing or listing interfaces
  19. EIGamal encryption VS Pairing encryption
  20. 「图像处理」使用Python+Openface实现人脸识别与关键点(landmarks)检测

热门文章

  1. 著名设计师的标志(Logo)设计观
  2. 编码原则 之 Once and Only Once
  3. 读书笔记第四周 《代码大全》
  4. python-unittest学习2--生成报告
  5. NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化
  6. 对WinForm的App.config文件进行加密
  7. XSLT Transform
  8. org.springframework.stereotype
  9. LinkedHashMap 底层分析
  10. 解决servlet中get方式中中文乱码问题前驱(一):装饰者模式再理解