当前位置: 首页 > news >正文

算法学习笔记:双指针

前言: 用于记录总结刷题过程中遇到的同类型问题
双指针问题及用法总结

1. 总结

双指针常用于遍历连序性对象(如数组、链表等)时,使用两个或多个指针进行单向遍历及相应的操作。避免多层循环,降低算法的时间复杂度。

2. 常见类型和示例

2.1 快慢指针

快慢指针,常见的有速度快慢(同时出发,不同速)、位置快慢(先后出发,同速)

快慢指针

Leetcode283. 移动零

同速指针

Leetcode876. 链表的中间结点
Leetcode19. 删除链表的倒数第 N 个结点

2.2 对撞指针

定义左指针left,右指针right,从两端遍历直到两指针相遇或满足条件为止。

实例

Leetcode344. 反转字符串
557. 反转字符串中的单词 III

2.3 滑动窗口

维护一个窗口,不断滑动,然后更新答案。

  1. 我们在字符串S中使用双指针中的左右指针技巧,初始化left = right = 0,把索引左闭右开区间[left, right)称为一个「窗口」。
  2. 我们先不断地增加right指针扩大窗口[left, right),直到窗口中的字符串符合要求(包含了T中的所有字符)。
  3. 此时,我们停止增加right,转而不断增加left指针缩小窗口[left, right),直到窗口中的字符串不再符合要求(不包含T中的所有字符了)。同时,每次增加left,我们都要更新一轮结果。
  4. 重复第 2 和第 3 步,直到right到达字符串S的尽头。

实例

Leetcode3. 无重复字符的最长子串

http://www.lryc.cn/news/16742.html

相关文章:

  • C++类的静态成员总结
  • 二、并发编程的三大特性
  • Ubuntu 22.04.2 LTS安装Apollo8.0
  • 提高转化率的 3 个客户引导最佳实践
  • 【消费战略】解读100个食品品牌丨元气森林 6年百亿的饮品黑马成功之道
  • b2b b2c o2o分布式电子商务平台源码 mybatis+spring cloud
  • LeetCode104_104. 二叉树的最大深度
  • 浏览器跨域问题
  • 面向对象的三特性
  • 管理者如何给员工沟通绩效
  • 使用Python启动appium
  • 活动回顾丨研发效能度量线下沙龙圆满举办
  • 问题解决篇 | Win11网络连接上了但是无法上网(修改DNS弹出框框“出现问题”,如何通过网络检测确定并修复网络问题)
  • Go语言进阶与依赖管理-学习笔记
  • 【Mybatis源码分析】datasource配置${}表达式时是如何被解析的?
  • 网络基础概述
  • 微搭使用笔记(四) 通过循环展示组件+json配置生成表单及数据获取
  • 做测试5年,靠业务熟悉吃老本,技术短板暴露,30岁被无情辞退...
  • Linux系统安装MySQL8.0版本详细教程【亲测有效】
  • [论文阅读笔记19]SiamMOT: Siamese Multi-Object Tracking
  • unix高级编程-fork和execve
  • Vue3+Ts+Vite开发插件并发布到npm
  • CAN TP层函数介绍
  • Spring架构篇--2.5 远程通信基础Select 源码篇--window--Select.open()
  • WEB静态交互展示【数据mock】
  • (4)C#传智:分支Switch与循环While(第四天)
  • Stable-Baselines 3 部分源代码解读 2 on_policy_algorithm.py
  • 15. Qt中OPenGL的参数传递问题
  • 注意,这本2区SCI期刊最快18天录用,还差一步录用只因犯了这个错
  • Could not find resource jdbc.properties问题的解决