【题目描述】
给出包含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次方)。
【输出】
输出符合条件的i最小的a[i]。
【输入样例】
10
19
13
11
19
11
5
6
3
4
3
【输出样例】
11
#include <iostream>
#include <unordered_map>
#include <climits>
using namespace std;
int main() {
int n;
cin >> n;
unordered_map<int, int> last_index; // 记录每个数上次出现的位置
int min_distance = INT_MAX; // 初始化最小距离为最大值
int result = -1; // 用于记录结果
for (int i = 0; i < n; i++) {
int a;
cin >> a;
if (last_index.find(a) != last_index.end()) {
// 如果a已经出现过,计算当前距离
int distance = i - last_index[a];
// 检查是否需要更新最小距离和结果
if (distance < min_distance) {
min_distance = distance;
result = a;
}
}
// 更新a的最近出现位置
last_index[a] = i;
}
if (result == -1) {
cout << "No" << endl;
} else {
cout << result << endl;
}
return 0;
}