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

最近的一对

题目描述

给出包含n个元素的数组a,求a中距离最近的一对 i,j,满足i < j 且 a[i] == a[j]。如果同时存在多对,输出最小的 i 对应的a[i]。

例如:10个数

19,13,11,19,11,5,6,3,4,3

满足存在a[i]=a[j]的数字包括:19,11,3。其中11,3这两对的距离更近,在距离相同的情况下,11的下标更靠前。如果不存在相同的数字,输出 "No"

输入格式

第一行:1个数n表示数组的长度(2 <= n <= 100000)。 第2至n+1行:每行1个数,对应数组的元素(1<= a[i] <= 10^9)

输出格式

输出符合条件的最小的a[i]。

样例

【样例输入】

10
19
13
11
19
11
5
6
3
4
3

【样例输出】

11

【样例说明】

满足存在a[i]=a[j]的数字包括:19,11,3。

其中11,3这两对的距离更近,在距离相同的情况下,11的下标更靠前。

数据范围与提示

2 <= n <= 100000 1<= a[i] <= 10^9

一些想法

这题用 map 做,先定义一个 map,这个 map 将用于记录每个数字最后一次出现的位置,定义一个用于记录当前距离最近的两个数,和一个用于记录这个数是多少的两个变量。然后输入有多少个数,循环输入这 n 个数,判断如果 a[x] 为真,说明他在之前有相同的数字出现过并且这个数与这个数字最后一次出现的距离比当前最短还短,更新最短值,记录这个数是多少。在 if 外面,a[x]=i; 标记某个数字最后一次出现的位置在 i。再循环外面判断,如果最小值与初始时的值一样,没有变化,说明没有两个相同的数字,输出 No,否则输出这个数。

注:最小值因为在后面要用于比较是否变化,我们要把他的初始值设在数据范围外,以防刚好而导致输出错误答案,可以设为 1e9或 1000000001,会超出 int 范围,所以要用 long long 类型。

注意大小写!map 的值和键可以都用 int。

AC代码

#include<bits/stdc++.h>
using namespace std;
map<int,int> a;
long long b=1000000001,sum;
int main(){int n;cin>>n;for(int i=1;i<=n;i++){int x;cin>>x;if(a[x]&&i-a[x]<b) b=i-a[x],sum=x;a[x]=i;}if(b!=1000000001) cout<<sum;else cout<<"No";return 0;
}

http://www.dtcms.com/a/613977.html

相关文章:

  • 网站设计建网站互联网是做什么的
  • 【C++】AVL树:详细使用及旋转
  • 网站开发技术的雏形 cgi满18点此转入2o2
  • 小华HC32L136K8TA 单片机新建 MDK5 工程模板(二)
  • Qt告警clazy-detaching-temporary浅谈
  • 前端构建工具扩展,Webpack插件开发
  • 拆解 LLM 的 “思考” 过程:推理机制深度解读
  • 《嵌入式成长系列之51单片机 --- Keil5创建工程》
  • 万米单波束EA640的raw数据处理
  • 成都公租房官方网站中南建设网官方网站
  • Cursor Chrome DevTools MCP 配置指南 for Windows
  • 汕头网站设计浩森宇特响应式网页设计图
  • 中职网站建设教学计划学网页设计软件开发
  • SpringBoot中Get请求和POST请求接收参数详解
  • 局部可变形模板匹配算法的初步实现
  • NFS服务
  • python多继承的类型定义了同一个属性或者方法
  • Springboot中CommandLineRunner的用法以及执行顺序的控制
  • (60页PPT)IDC云数据中心机房运维服务解决方案(附下载方式)
  • php网站开发 多少钱青海做网站最好的公司
  • 鸿蒙PC生态实践:LAME 音频编码库移植与工程化指南
  • 可以上传视频的网站建设中国科技成就手抄报
  • Redis_12_持久化(1)
  • stm32f4点灯
  • 自己做网站详细步骤电脑如何安装免费wordpress
  • 前端微前端样式隔离,CSS-in-JS方案
  • 【go.sixue.work】2.3 面向对象:结构体里的 Tag 用法
  • Halcon ROI 与图像仿射变换笔记
  • 软件设计师(软考中级)公式速记笔记
  • 电商网站开发过程手机推广app