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

双指针常用方法

1.双指针介绍

双指针是解题时一种常见的思路,一般有两种用法。

1)两个指针反方向,分别从数组开头和结尾开始移动,例如对有序数组的搜索。

2)两个指针同方向移动,例如快慢指针,都是从数组开头开始遍历,只是速度不一样。

除了用于数组,也可以用于链表,树,图。

2.反向的双指针

力扣icon-default.png?t=N2N8https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/

因为数组是非递减的,所以可以数组首尾各置一个指针,若值相加大于目标值,则尾指针自减,若值相加小于目标值,则头指针自增,这样就一步步逼近了目标值。

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {int i = 0, j = numbers.size()-1;while(i<j){int t = numbers[i] + numbers[j];if(target==t) return vector<int>({i+1,j+1});else if(target>t){i++;}else{j--;}}return vector<int>();}
};

3.同向的双指针

力扣icon-default.png?t=N2N8https://leetcode.cn/problems/linked-list-cycle-ii/这题有两个要点,先是要判断链表中是否有环,接着是找到环的入口。

判断是否有环,可以用快慢指针。

两个指针同时从起点出发,快指针一次两步,慢指针一次一步。

如果链表中有环,则快慢指针一定会相遇,就像在操场上一直跑圈,速度快的人一定会在某一刻比速度慢的人多跑一圈,所以二人相遇了。

若是快慢指针没有相遇,且快指针指向了NULL,那很明显,就是没有环。

确定链表有环后,就是寻找环的入口了。

可以用题目中的示例来简单理解一下。

下图使用快慢指针,从起点[3]出发,慢指针一次一步,快指针一次两步,很快这两个指针会在节点[-4]相遇。

相遇后,将慢指针移回链表起点[3],快慢指针都一次走一步,两个指针再次相遇的节点[2],就是环的入口。

 一个简单易懂的解释就是:

慢指针路径:起点--环的入口--快慢指针相遇的节点

快指针路径:起点--环的入口--快慢指针相遇的节点--环的入口--快慢指针相遇的节点

因为快指针路径==慢指针路径*2

所以【快慢指针相遇的节点--环的入口--快慢指针相遇的节点】== 【 起点--环的入口--快慢指针相遇的节点】

同时减去【环的入口--快慢指针相遇的节点】

所以【快慢指针相遇的节点--环的入口】== 【 起点--环的入口】

所以找到环得到入口就是将慢指针移到起点,与快指针都是一次一步,直到相遇,相遇节点就是环的入口。

如果还是没有理解的,可以直接搜索【Floyd 判圈法】找动画视频直观理解一下。

代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *detectCycle(ListNode *head) {if(!head) return NULL;ListNode* slow = head, *fast = head;while(slow->next && fast->next && fast->next->next){slow = slow->next;fast = fast->next->next;if(slow==fast){slow = head;while(slow!=fast){slow = slow->next;fast = fast->next;}return slow;}}return NULL;}
};

相关文章:

双指针常用方法

1.双指针介绍 双指针是解题时一种常见的思路&#xff0c;一般有两种用法。 1&#xff09;两个指针反方向&#xff0c;分别从数组开头和结尾开始移动&#xff0c;例如对有序数组的搜索。 2&#xff09;两个指针同方向移动&#xff0c;例如快慢指针&#xff0c;都是从数组开头…...

人工智能大模型之ChatGPT原理解析

前言 近几个月ChatGPT爆火出圈&#xff0c;一路狂飙&#xff1b;它功能十分强大&#xff0c;不仅能回答各种各样的问题&#xff0c;还可以信写作&#xff0c;给程序找bug…我经过一段时间的深度使用后&#xff0c;十分汗颜&#xff0c;"智障对话"体验相比&#xff0c…...

傅里叶谱方法-傅里叶谱方法的原理、快速傅里叶变换及其Matlab程序实现

第 3 章 傅里叶谱方法 本章介绍的求解偏微分方程(组)的方法都包含着周期性边界条件, 尽管周期性边界条件不属于数学物理方法中常见的传统三类边界条件, 但它并不脱离实际。某些科学问题的研究重点不受边界的影响, 如孤子之间的相互作用 (非线性薛定谔方程或 K d V \mathrm{…...

11万字数字政府智慧政务大数据建设平台(大数据底座、数据治理)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。部分资料内容&#xff1a; 一.1.1 数据采集子系统 数据采集需要实现对全区各委办单位的数据采集功能&#xff0c;包括离线采集、准实时采集和实时采集的采集方式&#xff0c;根…...

Node.js学习笔记——Node.js模块化

一、介绍 1.1.什么是模块化与模板&#xff1f; 将一个复杂的程序文件依据一定规则&#xff08;规范&#xff09;拆分成多个文件的过程称之为模块化。 其中拆分出的每个文件就是一个模块&#xff0c;模块的内部数据是私有的&#xff0c;不过模块可以暴露内部数据以便其他模块…...

【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(12)

目录 写在前面&#xff1a; 题目&#xff1a;P1746 离开中山路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; 代码&#xff1a; …...

【数据结构】堆(堆的实现 堆向下调整算法 堆的创建 堆的插入 堆的删除 堆的代码实现 堆的应用)

文章目录堆的实现堆向下调整算法堆的创建堆的插入堆的删除堆的代码实现堆的应用堆的实现 堆是属于操作系统进程地址空间内存区域的划分。 我们下面实现数据结构中的堆。 堆是一个完全二叉树&#xff1a;分为小根堆和大根堆。 小根堆&#xff1a;任何一个节点的值都<孩子的…...

JDBC数据库驱动的下载与安装与连接

目录 JDBC数据库驱动下载 Intellij IDEA安装JDBC驱动 在使用 JDBC 之前&#xff0c;需要下载相应的 JDBC 驱动程序&#xff0c;该驱动程序应该与你使用的数据库的版本相对应。可以在数据库官网上找到相应的 JDBC 驱动程序。 JDBC数据库驱动下载 点击官方链接 MySQL :: MySQ…...

如何更改 PDF 背景颜色?

PDF 是用于简洁演示的文件格式&#xff0c;许多员工都参考它来演示文件。如果您想要 PDF 文本的最佳对比度方案&#xff0c;我们建议您更改PDF 背景颜色。您甚至可以更改 PDF 颜色的文本&#xff0c;但它不会有太大吸引力&#xff0c;而是尝试使用 PDF 背景更改器应用程序。如果…...

room数据库使用以及增加表的使用

依赖 "androidx.room:room-runtime:2.2.6" "androidx.room:room-compiler:2.2.6" 1.实体类 实体类需要保存到数据库的新类用Entity注解表示 tableName是数据库中表的名字&#xff0c;my_advert可以根据自己需要自定义 PrimaryKey&#xff0c;NonNull主键…...

WiFi-交互过程分析

目录 1.802.11 标准简介 2.802.11 协议格式 2.1管理帧协议格式 2.1.1(Beacon (信标) 帧) 2.1.2(Probe Request (探测请求) 帧) 2.1.3(Probe Response (探测响应) 帧) 2.1.4(ATIM 帧) 2.1.5(Disassociation (解除关联) 与 Deauthentication (解除认证) 帧) 2.1.6(Assoc…...

基于ZYNQ+linux+xenomai 的多轴运动控制平台关键技术研发-测试系统搭建(四)

本章搭建实验测试平台&#xff0c;对多轴运动控制平台的硬件功能和系统任务通信功能 进行测试。通过测试结果&#xff0c;进行平台硬件设计正确性验证和系统实时处理与同步控制 的功能与性能验证。 5.1 测试平台搭建 多轴运动控制系统的测试平台搭建如图 5.1 所示。测试平台由安…...

初识操作系统

目录 1.操作系统是什么 2.为什么要有操作系统 3.操作系统的相关关系 1.驱动程序 2.系统调用接口 3.用户调用接口 4.用户程序 4.用具体的例子理解操作系统 1.操作系统是什么 &#xff08;1&#xff09;操作系统是一组管理计算机硬件与软件资源的计算机软件程序 。 &#xff08;…...

#详细介绍!!!线程池

本篇详细&#xff1a; 1.介绍了什么是线程池 2.使用线程池有什么好处 3.线程池的工作流程 4.线程池的各个参数介绍 5.如何编写Java代码来创建线程池 6.使用线程池的注意事项 目录 一&#xff1a;什么是线程池 二&#xff1a;为什么使用线程池来管理线程 三&#xff1a;线程池…...

【嵌入式Linux学习笔记】基于Linux官方库的标准外设驱动

对于标准的外设如LED&#xff0c;KEY&#xff0c;PWM等&#xff0c;以及标准通信协议&#xff0c;Linux都自带有标准的驱动库&#xff0c;不需要我们自行编写&#xff0c;只需要配置好相应的GPIO属性和电气属性&#xff0c;即可匹配相应的驱动&#xff0c;在应用程序中直接使用…...

网络爬虫抓包工具

&#x1f4da;介绍&#xff1a;Charles是著名的抓包工具&#x1f402;&#xff0c;可以抓取移动端与pc端网络访问&#x1f577;的所有数据。我们将使用它抓取我们与小程序交互的所有信息。&#x1f387;我们可以百度搜索Charles官网下载适用于自己系统的Charles安装包&#x1f…...

蓝桥杯倒计时 | 倒计时17天

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;蓝桥杯倒计时冲刺 描述&#x1f3a8;&#xff1a;蓝桥杯冲刺阶段&#xff0c;一定要沉住气&#xff0c;一步一个脚印&#xff0c;胜利就在前方&#xff01; 寄语&#x1f493;&#xff1a…...

【Spring Cloud Alibaba】7.Sentinel熔断器仪表盘监控

文章目录简介什么是 Sentinel控制台获取源码方式下载jar包方式启动访问服务配置项目&#xff0c;启用Sentinel完整配置测试简介 接下来我们通过Sentinel控制台来实现对服务消费者提供的熔断机制进行监控和控制&#xff0c;本操作先要完成之前的步骤&#xff0c;详情请参照【Sp…...

个人博客系统项目测试报告

项目背景介绍 背景&#xff1a;当在学习一项技能的时候&#xff0c;我们总会习惯通过博客来记录所学的知识点&#xff0c;方便后期遗忘时随时查看和快速复习。本次开发的Web网站程序便是为了更加轻量和方便地记录自己的学习笔记 概述&#xff1a;一个Web网站程序&#xff0c;…...

flutter安装自用笔记

参照文章&#xff1a; 开发环境搭建 Flutter环境配置步骤&#xff1a; 1.系统配置要求 2.Java环境 3.Flutter SDK 4.Android 开发环境一、系统配置要求 操作系统&#xff1a;Windows 7 SP1 或更高的版本&#xff08;基于 x86-64 的 64 位操作系统&#xff09; 磁盘空间&…...

Qwen3-ASR-1.7B惊艳效果:自动识别中英文技术文档朗读中的公式/代码块

Qwen3-ASR-1.7B惊艳效果&#xff1a;自动识别中英文技术文档朗读中的公式/代码块 你有没有遇到过这样的场景&#xff1f;听一场技术分享的录音&#xff0c;讲师在讲解代码逻辑时&#xff0c;你一边听一边手忙脚乱地记录&#xff0c;生怕漏掉一个括号或一个变量名。或者&#x…...

Awoo Installer深度解析:破解Switch游戏安装困境的全能工具

Awoo Installer深度解析&#xff1a;破解Switch游戏安装困境的全能工具 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 在Nintendo Switch破解社区…...

UI-TARS-desktop场景应用:自动生成销售报告与更新库存实战

UI-TARS-desktop场景应用&#xff1a;自动生成销售报告与更新库存实战 1. 场景痛点与解决方案 1.1 传统销售管理的效率瓶颈 在零售和电商行业中&#xff0c;销售数据分析和库存管理是日常运营的核心工作。传统方式通常需要&#xff1a; 手动从多个系统导出销售数据人工整理…...

Win11共享打印机连接失败?绕过安全策略的终极指南

1. Win11共享打印机连接失败的真相 最近帮朋友处理Win11共享打印机的问题时&#xff0c;发现这个看似简单的操作居然能卡住这么多人。明明按照传统方法一步步操作&#xff0c;却总是提示各种错误。其实这背后是微软在Win11 22H2版本后引入的新安全策略在作祟 - 他们默认关闭了S…...

如何快速配置TranslucentTB:Windows任务栏美化终极教程

如何快速配置TranslucentTB&#xff1a;Windows任务栏美化终极教程 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想要让Windows任务栏变…...

ZYNQ PS侧DDR3内存配置避坑指南:以ACZ702开发板为例,手把手教你搞定MT41K128M16

ZYNQ PS侧DDR3内存配置实战&#xff1a;从硬件原理到Vivado参数设置全解析 当你第一次拿到ACZ702这样的ZYNQ开发板&#xff0c;准备配置PS侧的DDR3内存时&#xff0c;是否遇到过这样的困惑&#xff1a;为什么在Vivado中找不到DDR管脚约束选项&#xff1f;为什么按照传统FPGA的D…...

Rust DLL注入技术深度解析:Rust-for-Malware-Development完整实现指南

Rust DLL注入技术深度解析&#xff1a;Rust-for-Malware-Development完整实现指南 【免费下载链接】Rust-for-Malware-Development Rust for malware Development is a repository for advanced Red Team techniques and offensive malwares & Ransomwares, focused on Rus…...

从仿真到实战:在CST/HFSS中如何设置周期性边界条件评估紧耦合天线阵元性能

从仿真到实战&#xff1a;在CST/HFSS中设置周期性边界条件评估紧耦合天线阵元性能 天线阵列设计中最具挑战性的环节之一&#xff0c;是如何准确预测单个阵元在阵列环境中的真实工作状态。当我在设计第一个超宽带相控阵时&#xff0c;曾因忽视阵元间互耦效应导致实物测试结果与仿…...

CYBER-VISION零号协议互联网舆情智能监测与分析系统

CYBER-VISION零号协议&#xff1a;构建你的互联网舆情智能监测雷达 最近和几个做市场、公关的朋友聊天&#xff0c;他们都在抱怨同一个问题&#xff1a;每天花大量时间刷新闻、看社交媒体&#xff0c;就为了捕捉行业动态和用户反馈&#xff0c;生怕错过什么重要信息。人工监测…...

造相Z-Image文生图模型v2:3步搭建你的专属AI画师

造相Z-Image文生图模型v2&#xff1a;3步搭建你的专属AI画师 1. 为什么选择Z-Image v2作为你的AI画师 在众多文生图模型中&#xff0c;造相Z-Image v2以其独特的优势脱颖而出。作为阿里通义万相团队开源的高性能模型&#xff0c;它原生支持768768及以上分辨率的高清图像生成&…...