001 双指针

双指针

  • 双指针(Two Pointers)

双指针(Two Pointers)

  • 对撞指针(Opposite Direction Two Pointers):
    • 对撞指针从两端向中间移动,一个指针从最左端开始,另一个最右端开始,然后逐渐往中间逼近
    • 使用场景:
      • 有序数组中寻找两数之和
      • 盛最多水的容器
      • 判断回文字符串/链表
    • 特点:常用于有序数组,时间复杂度为 O(n) 或 O(n^2)
    • 对撞指针的终止条件一般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循环)
      • left == right (两只指针指向同一位置)
      • left > right (两个指针错开)
  • 快慢指针(Same Direction/SIow-Fast Pointers):又称龟速赛跑算法,基本思想是使用两个移动速度不同在数组或链表等序列结构上移动.
    • 两个指针从同一个方向出发,一个走快点,一个走慢一点
    • 使用场景:
      • 删除倒数第N 个节点
      • 检测链表是否有环
      • 找链表中点
      • 会问链表判断
    • 特点:适合链表或需要跳跃处理的问题
    • 对于处理环形链表或数组非常有用
    • 问题中出现循环往复的情况时,也可以考虑使用快慢指针指针思想
  • 滑动窗口(SIiding Window)
    • 定义:也可以看做一种双指针,但强调 “窗口” 的概念。
    • 使用场景:
      • 最长无重复子串
      • 子数组之和等于目标值
      • 字符串包含所有字符串的最小子串
    • 特点:两个指针一前一后控制窗口范围,适用于连续子数组/子串问题
  • 归并排序中的双指针(Merge Two Sorted Arrays)
    • 定义:在归并排序或合并两个有序数组时使用双指针进行合并
    • 使用场景:
      • 合并两个有序数组
      • 合并两个有序链表
类型移动方向典型应用场景时间复杂度
对撞指针对向两数之和、盛水容器、三数之和O(n) ~ O(n²)
快慢指针同向链表找环、删除倒数节点O(n)
滑动窗口同向扩展窗口最长子串、子数组和O(n)
归并双指针同向合并有序数组/链表O(n + m)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86281.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【unitrix】 4.7 库数字取反(not.rs)

一、源码 这段代码是用Rust语言实现的一个库,主要功能是对数字进行位取反操作(按位NOT运算)。 /*库数字取反* 编制人: $ource* 修改版次:0版完成版* 本版次创建时间: 2025年6月25日* 最后修改时间: 无* 待完善问题:无*/ use cor…

在ASP.NET Core WebApi中使用日志系统(Serilog)

一.引言 日志是构建健壮 Web API 的重要组成部分,能够帮助我们追踪请求、诊断问题、记录关键事件。在 .Net 中,日志系统由内置的 Microsoft.Extensions.Logging 抽象提供统一接口,并支持多种第三方日志框架(如 Serilog、NLog 等&…

(链表:哈希表 + 双向链表)146.LRU 缓存

题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记…

Go Web开发框架实践:模板渲染与静态资源服务

Gin 不仅适合构建 API 服务,也支持 HTML 模板渲染和静态资源托管,使其可以胜任中小型网站开发任务。 一、模板渲染基础 1. 加载模板文件 使用 LoadHTMLGlob 或 LoadHTMLFiles 方法加载模板: r : gin.Default() r.LoadHTMLGlob("templ…

缓存与加速技术实践-Kafka消息队列

目录 #1.1消息队列 1.1.1什么是消息队列 1.1.2消息队列的特征 1.1.3为什么需要消息队列 #2.1ksfka基础与入门 2.1.1kafka基本概念 2.1.2kafka相关术语 2.1.3kafka拓扑架构 #3.1zookeeper概述介绍 3.1.1zookeeper应用举例 3.1.2zookeeper的工作原理是什么? 3.1.3z…

鸿蒙前后端部署教程

第一步:部署Java后端 打开IDEA编辑器 第二步:用DevEco Studio运行鸿蒙端项目 然后按WinR键调出Win的命令行,输入ipconfig 打开后端IDEA可以查看数据库情况,如下图

Python 常用定时任务框架介绍及代码举例

文章目录 Python 常用定时任务框架简介🧩 一、轻量级方案(适合简单任务)1. **schedule库** ⚙️ 二、中级方案(平衡功能与复杂度)2. **APScheduler**3. **Celery Celery Beat** 🚀 三、异步专用方案&#…

使用redis服务的redisson架构实现分布式锁

加锁 /*** 尝试为指定的许可证 ID 获取分布式锁。如果锁已被占用,则立即抛出业务异常。** param licenseId 需要加锁的许可证 ID(即锁名称)* return true 表示成功获取锁,但请注意:* 锁实际持有时间为 30 秒…

HTML表格元素

HTML表格元素深度解析与实战应用 一、表格基本结构与语义化 1. 基础表格元素详解 <table> 容器元素 核心作用&#xff1a;定义表格容器重要属性&#xff1a; border&#xff1a;已废弃&#xff0c;应使用CSS设置边框aria-label/aria-labelledby&#xff1a;为屏幕阅读…

如何使用 Dockerfile 创建自定义镜像

使用 Dockerfile 创建自定义镜像的过程非常清晰&#xff0c;通常包括定义基础镜像、安装依赖、复制代码、设置环境变量和启动命令等步骤。下面详细讲解从零创建自定义镜像的完整流程。 一、什么是 Dockerfile&#xff1f; Dockerfile 是一个文本文件&#xff0c;定义了如何构建…

设置AWS EC2默认使用加密磁盘

问题 EC2磁盘需要使用默认加密。这里需要设置一下默认加密。 EC2

【树的概念及其堆的实现】

树的概念及其堆的实现 1.树的概念2.树的相关概念3.二叉树的概念4. 满二叉树和完全二叉树5.二叉树的存储结构6.二叉树顺序结构的实现的7.堆的结构及其实现 1.树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系…

鸿蒙系统(HarmonyOS)经典红色风格登录页布局

预览 简介 基于鸿蒙系统&#xff08;HarmonyOS&#xff09;开发的现代化登录界面&#xff0c;采用了科技感十足的红色主题设计。该界面结合了流畅的动画效果、精心设计的视觉元素和人性化的交互体验&#xff0c;为用户提供了一个安全、美观且易用的登录入口。 &#x1f3a8; …

C++虚函数多态

class C{ public:void x1(){};void x2(){};};C c; cout << sizeof(c) <<"\n";1字节 class D{ public:void x1(){};void x2(){};virtual void x3(){};//void *vptr看不见的虚函数表指针 }; D d; cout << sizeof(d) <<"\n";8字节类A…

新编辑器编写指南--给自己的备忘

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

目标检测neck算法之MPCA和FSA的源码实现

目标检测neck算法之MPCA和FSA的源码实现 使用BIBM2024 Spatial-Frequency Dual Domain Attention Network For Medical Image Segmentation的Frequency-Spatial Attention和Multi-scale Progressive Channel Attention改进neck. 接下来&#xff0c;我将讲解它的源码操作的实现…

MyBatis-Plus的3.5.7和PageHelper的那个版本对应

MyBatis-Plus的3.5.7和PageHelper的那个版本对应 根据你的知识库中提到的信息&#xff1a; MyBatis-Plus 3.5.7 使用的是 JSqlParser 4.6 版本。PageHelper 若使用了不同版本的 JSqlParser&#xff08;如 4.7&#xff09;&#xff0c;会导致冲突。 ✅ 推荐对应关系 为了保证…

Apifox 6 月产品更新|支持 AI 能力、交互优化、在线文档新增 SEO 设置、gRPC 项目支持前/后置操作

在 2025 年的 API 开发领域&#xff0c;Apifox 作为一款集 API 设计、调试、Mock 和测试于一体的协作平台&#xff0c;已成为开发者的“得力助手”。然而&#xff0c;随着业务需求的不断增长&#xff0c;开发者对工具的效率和功能提出了更高的要求。6 月份&#xff0c;Apifox 推…

Acrobat JavaScript 从浏览器到 PDF 环境的转换

目录 什么是 JavaScript?JavaScript 核心语言与 Acrobat 特定 API学习 JavaScript 核心语言的挑战浏览器与 Acrobat JavaScript 的关键差异在 Acrobat 中运行 JavaScript 代码替代浏览器特定函数的方法后续学习建议什么是 JavaScript? JavaScript 最初于 1995 年作为 Netsca…

OpenCV CUDA模块设备层-----指数运算函数exp()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV 的 CUDA 设备端数学函数 中的一个内联函数&#xff0c;用于在 GPU 上对 uchar1 类型&#xff08;单通道图像像素&#xff09;执行指数运算…