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

02-双指针-A-B 数对

题目

链接:P1102 A-B 数对 - 洛谷

思路

问题场景想象

我们可以把这个问题想象成在一个排队的队伍里找符合特定身高差的人对。给定的数列里的每个数就好比队伍里每个人的身高,而差值 C 就是我们要找的身高差。我们的目标是找出队伍里所有身高差恰好是 C 的人对有多少组。

1. 排队整理(排序)

首先,我们让队伍里的人按照身高从小到大排好队。这样做的好处是,我们可以从矮到高依次去检查每个人,并且能很方便地知道后面的人肯定比前面的人高或者一样高。就好像我们从队伍的最前面开始,一个一个往后看,这样找身高差会更有规律。

2. 准备工作
  • ans 就像是一个计数器,用来记录我们找到的符合身高差是 C 的人对的数量,一开始计数器归零。
  • r1 和 r2 就像是我们的两只手指,都先指向队伍的第一个人。
3. 开始找人(双指针遍历)
  • 外层循环(固定左指针 l
    • 我们让一个手指(左指针 l)从队伍的最前面开始,依次指向每一个人。这个手指指向的人就是我们要找的 “基准人”,也就是数对里的 B
  • 第一个 while 循环(移动 r1 指针)
    • 另一只手指 r1 从队伍的第一个人开始往后移动。我们用 r1 指向的人的身高减去基准人的身高,如果这个差值小于 C,说明当前 r1 指向的人还不够高,和基准人的身高差没达到我们想要的 C,那就让 r1 继续往后指,直到找到一个人,他和基准人的身高差大于等于 C 为止。这个 r1 指向的人就是第一个和基准人身高差可能是 C 的人。
  • 第二个 while 循环(移动 r2 指针)
    • 再用另一只手指 r2 也从队伍第一个人开始往后移动。同样用 r2 指向的人的身高减去基准人的身高,如果这个差值小于等于 C,说明 r2 指向的人和基准人的身高差还在我们允许的范围内,那就让 r2 继续往后指,直到找到一个人,他和基准人的身高差大于 C 为止。这个 r2 指向的人的前一个人就是最后一个和基准人身高差是 C 的人。
  • 统计人对数量
    • 当我们确定了 r1 和 r2 的位置后,如果 r1 指向的人和基准人的身高差恰好是 C,并且 r2 前一个人(也就是 r2 - 1 指向的人)和基准人的身高差也恰好是 C,那就说明从 r1 到 r2 - 1 这些人都能和基准人组成身高差是 C 的人对。这些人对的数量就是 r2 - r1 个,我们把这个数量加到计数器 ans 里。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int q[N];
int main(){int n,c;cin>>n>>c;for(int i=1;i<=n;i++){cin>>q[i];}sort(q+1,q+n+1);//我们的数组是从第2个元素开始放的int r1=1,r2=1;long long ans=0;for(int l=1;l<=n;l++){while(r1<=n&&q[r1]-q[l]<c)r1++;//r1的目标是找到第一个等于差C的位置while(r2<=n&&q[r2]-q[l]<=c)r2++;//这里是<=;因为r2的目标是找到第一个超过差C的位置if(q[r1]-q[l]==c&&q[r2-1]-q[l]==c){ans+=r2-r1;}}cout<<ans<<endl;return 0;
}

相关文章:

02-双指针-A-B 数对

题目 链接&#xff1a;P1102 A-B 数对 - 洛谷 思路 问题场景想象 我们可以把这个问题想象成在一个排队的队伍里找符合特定身高差的人对。给定的数列里的每个数就好比队伍里每个人的身高&#xff0c;而差值 C 就是我们要找的身高差。我们的目标是找出队伍里所有身高差恰好是 …...

2025年Cursor最新安装使用教程

Cursor安装教程 一、Cursor下载二、Cursor安装三、Cursor编辑器快捷键(1) 基础编辑快捷键(2) 导航快捷键(3) 其他常用快捷键 一、Cursor下载 Cursor官方网站&#xff08;https://www.cursor.com/ &#xff09; 根据自己电脑操作系统选择对应安装包 二、Cursor安装 下载完成后…...

Modbus TCP/IP 与 RS-485 接口的兼容性

Modbus TCP/IP 和 RS-485 接口的 直接兼容性 不存在,因为两者分属不同的网络层次(TCP/IP 基于以太网,RS-485 是物理层接口),但通过 协议转换和网络架构设计 可以实现互联互通。以下是详细的技术解析与实现方案: 一、协议差异对比 特性Modbus TCP/IPModbus RTU(RS-485)物…...

快速部署:在虚拟机上安装 CentOS 7 的详细步骤

CentOS是一个开源的基于Red Hat Enterprise Linux (RHEL) 的Linux发行版&#xff0c;它的主要目的是提供一个与RHEL相似的操作系统但不包含RHEL的商业支持和服务&#xff0c;完全免费。主要面向那些希望在企业环境中使用稳定、可靠的Linux系统但又不想支付RHEL许可证费用的用户…...

better-sqlite3之exec方法

在 better-sqlite3 中&#xff0c;.exec() 方法用于执行包含多个 SQL 语句的字符串。与预编译语句相比&#xff0c;这种方法性能较差且安全性较低&#xff0c;但有时它是必要的&#xff0c;特别是当你需要从外部文件&#xff08;如 SQL 脚本&#xff09;中执行多个 SQL 语句时。…...

NDT 代价函数

SLAM 中的 NDT 代价函数 在SLAM&#xff08;同步定位与地图构建&#xff09;中&#xff0c;NDT&#xff08;Normal Distributions Transform&#xff09;是一种常用的点云配准方法。NDT代价函数用于评估点云配准的质量。以下是NDT代价函数的详细介绍&#xff1a; NDT 代价函数…...

【有啥问啥】深入浅出:大模型应用工具 Ollama 技术详解

深入浅出&#xff1a;大模型应用工具 Ollama 技术详解 引言 近年来&#xff0c;大型模型&#xff08;Large Models&#xff0c;LLMs&#xff09;技术突飞猛进&#xff0c;在自然语言处理、计算机视觉、语音识别等领域展现出强大的能力。然而&#xff0c;部署和运行这些庞大的…...

【AI训练】如何提高LLM的训练速度

提高大型语言模型&#xff08;LLM&#xff09;的训练速度需要从算法优化、硬件加速、软件框架和基础设施等多个层面综合考虑。以下是一些关键方法&#xff0c;按类别分类说明&#xff1a; --- 一、硬件优化 1. 分布式训练 - 数据并行&#xff08;Data Parallelism&#xff09;…...

利用opencv_python(pdf2image、poppler)将pdf每页转为图片

1、安装依赖pdf2image pip install pdf2image 运行.py报错&#xff0c;因为缺少了poppler支持。 2、安装pdf2image的依赖poppler 以上命令直接报错。 改为手工下载&#xff1a; github: Releases oschwartz10612/poppler-windows GitHub 百度网盘&#xff1a; 百度网盘…...

大数据测试总结

总结测试要点&#xff1a; 参考产品文档&#xff0c;技术文档梳理以下内容 需求来源 业务方应用场景 数据源&#xff0c;数据格转&#xff0c;数据产出&#xff0c;数据呈现方式&#xff08;数据消亡史&#xff09;&#xff0c;数据量级&#xff08;增量&#xff0c;全量&am…...

pytorch高可用的设计策略和集成放大各自功能

在使用 PyTorch 编写模型时,为确保模型具备高可用性,可从模型设计、代码质量、训练过程、部署等多个方面采取相应的方法,以下为你详细介绍: 模型设计层面 模块化设计 实现方式:将模型拆分成多个小的、独立的模块,每个模块负责特定的功能。例如,在一个图像分类模型中,可…...

容器 /dev/shm 泄漏学习

容器 /dev/shm 泄漏的介绍 在容器环境中&#xff0c;/dev/shm 是一个基于 tmpfs 的共享内存文件系统&#xff0c;通常用于进程间通信&#xff08;IPC&#xff09;和临时数据存储。由于其内存特性&#xff0c;/dev/shm 的大小是有限的&#xff0c;默认情况下 Docker 容器的 /de…...

Redis面试常见问题——集群方案

Redis集群方案 在Redis中提供的集群方案总共有三种 主从复制 哨兵模式 分片集群 主从复制 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 主从数据同步原理 单节点Redis的并发能力是有…...

企业级Python后端数据库使用指南(简略版)

总述 企业级应用通常需要考虑扩展性、安全性、性能等因素。数据库的使用也不例外。连接数据库的第一步应该是建立连接&#xff0c;但企业环境中可能不会每次操作都新建连接&#xff0c;而是使用连接池来管理&#xff0c;这样可以提高效率&#xff0c;减少资源消耗。例如&#x…...

Qt:day4

一、作业 1&#xff1a;实现绘图的时候&#xff0c;颜色的随时调整&#xff1b; 2&#xff1a;追加橡皮擦功能&#xff1b; 3&#xff1a;配合键盘事件&#xff0c;实现功能&#xff1b; 当键盘按 ctrlz 的时候&#xff0c;撤销最后一次绘图。 【Headers / widget.h】&#xff…...

随机播放音乐 伪随机

import java.util.*;/*** https://cloud.tencent.com.cn/developer/news/1045747* 伪随机播放音乐*/ public class MusicPlayer {private List<String> allSongs; // 所有歌曲列表private List<String> playedSongs; // 已经播放过的歌曲列表private Map<String…...

vue3之echarts仪表盘

vue3之echarts仪表盘 效果如下&#xff1a; 版本 "echarts": "^5.5.1" 核心代码&#xff1a; <template><div ref"chartRef" class"circle"></div> </template> <script lang"ts" setup>…...

将PDF转为Word的在线工具

参考视频&#xff1a;外文翻译 文章目录 一、迅捷PDF转换器二、Smallpdf 一、迅捷PDF转换器 二、Smallpdf...

MWC 2025|紫光展锐联手美格智能发布5G通信模组SRM812

在2025年世界移动通信大会&#xff08;MWC 2025&#xff09;期间&#xff0c;紫光展锐携手美格智能正式推出了基于紫光展锐V620平台的第二代5G Sub6G R16模组SRM812&#xff0c;以超高性价比方案&#xff0c;全面赋能合作伙伴&#xff0c;加速5G规模化应用在各垂直领域的全面落…...

js操作数组的常用方法

1. 遍历方法 1.1 forEach 作用&#xff1a;遍历数组中的每个元素&#xff0c;并对每个元素执行回调函数。 是否改变原数组&#xff1a;不会改变原数组。 返回值&#xff1a;undefined。 1.1.1 基本用法 const arr [1, 2, 3]; arr.forEach((item) > console.log(item …...

前端基础之ajax

vue-cli配置代理服务器解决跨域问题 我们可以使用一个代理服务器8080&#xff0c;Vue项目8080发送请求向代理服务器8080发送请求&#xff0c;再由在理服务器转发给后端服务器 首先需要在vue.config.js中配置代理服务器 const { defineConfig } require(vue/cli-service) modul…...

Android车机DIY开发之软件篇(二十)立创泰山派android编译

准备工作 sudo apt-get update sudo apt-get install git -y sudo apt install repo -ysudo apt-get install python2.7sudo apt-get install python3sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --install /u…...

ADB 和 Monkey 进行 Android 应用的测试和调试

ADB(Android Debug Bridge)和 Monkey 是 Android 开发和测试中常用的工具。ADB 用于与 Android 设备通信,而 Monkey 是一个压力测试工具,可以模拟用户随机操作。以下是它们的高级用法,帮助您更高效地进行 Android 应用测试和调试。 一、ADB 的高级用法 1. 设备管理 查看连…...

【无标题】FrmImport

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;四、项目展示五、资源链接 前言 我能抽象出整个世界&#xff0c;但是我不能抽象你。 想让你成为私有常量&#xff0c;这样外部函数就无法访问你。 又想让你成为全局常量&#xff0c;这样在我的…...

高并发场景下的数据库优化

在高并发系统中&#xff0c;数据库通常是性能瓶颈。面对高并发请求&#xff0c;我们需要采用合适的优化策略&#xff0c;以保证数据库的稳定性和高效性。本文将介绍数据库高并发问题的成因&#xff0c;并结合 Mybatis-Plus&#xff0c;探讨 乐观锁、悲观锁、高并发优化及数据库…...

IP-Guard软件设置P2P升级功能

日常使用IP-Guard软件遇到客户端升级&#xff0c;需要从服务器下载升级包&#xff0c;为了让快速升级&#xff0c;可以配置参数&#xff0c;具体设置见下图&#xff1a; 控制台—策略—定制配置—新增 关键字&#xff1a;obt_dislble_p2p2 内容&#xff1a;2...

【Mac】git使用再学习

目录 前言 如何使用github建立自己的代码库 第一步&#xff1a;建立本地git与远程github的联系 生成密钥 将密钥加入github 第二步&#xff1a;创建github仓库并clone到本地 第三步&#xff1a;上传文件 常见的git命令 git commit git branch git merge/git rebase …...

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…...

Git安装与配置

安装部分&#xff1a; Windows&#xff1a;下载官网安装包&#xff0c;双击安装&#xff0c;路径选择&#xff08;注意是否修改&#xff09;&#xff0c;安装选项&#xff08;是否勾选某些选项&#xff0c;如提到安装时更换编辑器为Nano&#xff09;。Linux&#xff1a;通过包管…...

数据库的char字段类型

MYSQL 一、char和varchar的区别 char是固定长度的&#xff0c;而varchar会根据具体的长度来使用存储空间&#xff0c;另外varchar需要用额外的1-2个字节存储字符串长度。 1). 当字符串长度小于255时&#xff0c;用额外的1个字节来记录长度 2). 当字符串长度大于255时&#xff…...