首页 > 其他分享 >快慢指针技巧

快慢指针技巧

时间:2024-06-17 09:11:15浏览次数:13  
标签:快慢 slow 技巧 代表 fast 区域 指针

快慢指针技巧

在说快慢指针之前,我们先说一下双指针

双指针

双指针:使用两个指针来解决问题。

所谓的指针其实就是指数组的下标,或者链表的节点的地址。

我们以数组为例介绍一下。

双指针

有两个指针分别存储着数组的两个下标,这就是双指针。

那快慢指针是什么呢?

快慢指针

快慢指针,就是一个指针走得慢,另一个指针走得快。

如图所示:

快慢指针

这实际上就是快慢指针,一个走得慢,一个走得快。

我们可以看到,fast指针把整个大数组分成了两个区域:

[0,fast-1]代表已处理的区域
[fast,n-1]代表未处理的区域

快慢指针将数组分成两个大区域

同时,已处理区域又被slow指针划分为了两个区域:

[0,slow-1]代表符合某些条件的区域
[slow,fast-1]代表不符合某些条件的区域

已处理区域被划分为两个小区域

处理逻辑

每一轮处理fast指针指向的元素,

如果元素不符合某种条件,fast++,向后移动。

如果元素符合某种条件,可能会和slow指针指向的元素进行某些运算,比如交换;

然后快慢指针同时向后移动;

直到fast指针移出数组,如图:

fast指针移出数组

slow和fast指针,可以称为:循环不变量。因为它们在循环的时候的含义是不会变的。

始终遵守,如下条件:

[0,fast-1]代表已处理的区域
[fast,n-1]代表未处理的区域

[0,slow-1]代表符合某些条件的区域
[slow,fast-1]代表不符合某些条件的区域

标签:快慢,slow,技巧,代表,fast,区域,指针
From: https://www.cnblogs.com/nicaicai/p/18251700

相关文章

  • 【C语言】字符指针
    在指针的类型中我们知道有一种指针类型为字符指针char*;一般使用:intmain(){charch='w';char*pc=&ch;*pc='w';return0;}还有一种使用方式如下:intmain(){constchar*pstr="hellobit.";//这里是把一个字符串放到pstr指针变量里了吗?printf......
  • Nginx 配置技巧汇总
    前言Nginx是一款非常流行的高性能web和反向代理服务器,它以其稳定性、低资源消耗以及高并发能力而闻名。本教程中将分享一些实用的Nginx配置技巧,这些技巧可以帮助你优化服务器性能和管理网络请求。1.配置静态文件缓存为了提高网站加载速度和降低服务器负载,对静态文......
  • C++智能指针
    std::unique_ptr:独特所有权模型,一个std::unique_ptr在同一时间内只允许有一个对象实例。它不允许被复制,但可以被移动。std::shared_ptr:共享所有权模型,多个std::shared_ptr可以指向同一对象,通过引用计数机制来管理对象的生命周期。当最后一个指向对象的std::shared_ptr被销毁时,对......
  • #C语言结构体/结构体指针/单链表学习必备总结(浓缩版)#
    一.结构体的定义结构体是一种用户自定义的数据类型,用于将多个不同类型的数据组合在一起形成一个新的数据类型。结构体由多个成员变量组成,每个成员变量可以是不同的数据类型,可以是基本数据类型(如整型、浮点型、字符型等)或其他结构体类型。结构体的成员变量在内存中是按照声明的......
  • IntelliJ IDEA 使用技巧合集
    1、查看当前类或接口的层次结构快捷键:Ctrl+H类层次结构:可以查看类的继承关系(但类看不了实现哪些接口)父类型层次结构:可以查看类继承了哪些父类和父接口,接口继承了哪些父接口子类型层次结构:可以查看当前类被哪些类继承,当前接口被哪些子接口继承和被哪些类实现在Int......
  • 代码随想录刷题记录(8)| 字符串(151.反转字符串里的单词,卡码网:55.右旋转字符串,28. 找出字
    目录(四)反转字符串里的单词1. 题目描述2.思路3.解题过程(1)使用额外空间存储(2)原地反转 (五)右旋转字符串1.题目描述2.思路3.解题过程 (六)找出字符串中第一个匹配项的下标1.题目描述2.思路3.解题思路(七)重复的子字符串1.题目描述2.思路3.解题过程(八)......
  • 开发者选项-显示指针位置
    开发者选项-指针位置应用设置部分搜索对应字串,在SettingsLib中搜到“指针位置”字串,其id名为pointer_location根据id在Settings中搜索布局相关(res/xml/development_settings.xml)查看其key(pointer_location)相关代码显然,在点击指针位置的控件时,在设置中会对应在Settings.System表中p......
  • C语言指针与数组的区别
    在C语言中,指针和数组虽然在很多情况下可以互换使用,但它们在概念上和行为上存在一些区别。下面详细解释这些区别:###数组1.**固定大小**:数组在声明时必须指定大小,这个大小在编译时确定,之后不能改变。2.**连续内存**:数组中的元素在内存中是连续存储的。3.**类型**:数组名代......
  • 全面的初级入门指南,从安装到基本使用,再到一些高级功能的介绍,帮助用户在实际操作中逐步
    大纲:WindowsNmap初级使用教程1.简介什么是Nmap?Nmap的主要功能和用途安全和法律注意事项2.安装Nmap前提条件从官方网站下载Nmap安装步骤验证安装3.基本使用打开命令提示符运行你的第一个Nmap扫描示例命令:nmap目标IP地址理解基本的输出结果4.常用扫......
  • 【Git入门和实战】第2课:git中的专有名词和概念解释:仓库、工作目录、暂存区、远程仓库
    本文是git入门到实战系列文章的第2课,主要讲解git中的专有名词和概念,主要有仓库(repository)、工作目录(WorkingDirectory)、暂存区(Stage/Index)、远程仓库(remote)、、提交(commit)、HEAD指针、文件状态、分支(branch)、合并(merge)、标签(tag)、引用(ref)。(文末附练习题,......