关注我,分享高质量每日一题题解~
b站同名账号分享力扣杯历届真题视频题解,也欢迎大家提出宝贵意见!
思路:哈希表
- 首先我们要记录数组中元素出现的次数,所以要用到哈希表。
- 其次我们需要记录每个元素对应的索引,也可以利用哈希表(由于最终的结果中,我们不关心重复数字,所以其对应不同索引的问题可以被忽略掉)
- 由于我们需要找到最小的那个数,所以可以对数组进行排序(这是考虑到数据范围 $n \leq 2 \times 10^5$,可以使用 $O(nlgn)$ 的排序算法;若数据范围更大,我们也可以在遍历数组过程中记录满足条件的最小值,在 $O(n)$ 范围内完成)
代码(C++)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
int T = 1;
cin >> T;
while(T--) {
int n;
cin >> n;
vector<int> a(n);
map<int, int> cnt; // 计数
map<int, int> num; // 索引
for(int i = 0; i < n; i++) {
cin >> a[i];
cnt[a[i]]++;
num[a[i]] = i + 1;
}
sort(a.begin(), a.end());
bool ok = false; // 判断是否存在仅出现一次的数
for(int i = 0; i < n; i++) {
if(cnt[a[i]] == 1) {
ok = true;
cout << num[a[i]] << endl;
break;
}
}
if(!ok) cout << -1 << endl;
}
}