2887: 【例61.2】 最近的一对

内存限制:64 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:3 解决:3

题目描述

给出包含$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\le n\le 100000$)。第$2$至$n+1$行:每行$1$个数,对应数组的元素($1\le a[i]\le 10^9$)。

输出

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

样例输入 复制

10
19
13
11
19
11
5
6
3
4
3

样例输出 复制

11

提示

#include<bits/stdc++.h>
#define INF 0x7fffffff
using namespace std;
map<int,int> mp;
int n,x,ans,minx=INF;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x;
        if(mp[x]==0) mp[x]=i;
        else{
            if(i-mp[x]<minx){
                minx=i-mp[x];
                ans=x;
            }
        mp[x]=i;
        }
    }
    if(ans==0) cout<<"No"<<endl;
    else cout<<ans<<endl;
    return 0;
}