题意(已简化):
多测。输入一个长度为n的数组,请你输出只出现了1次数中最小的哪一个的位置,如果没有只出现1次的数,则输出-1.
思路:
使用pair可以更快地解决这个题目。pair数组a的first可以存数字,second就可以用来存位置。然后把数组以first大小从小到大排序。由于当first有重复数字会连续在一起,所以只需判断这个a[i].first变量的a[i-1].first与a[i+1].first是否与它相同,如果都不是,那这个数就只出现了一次。
Code:
#include<bits/stdc++.h>
#define cases(t) int t; cin>>t; while(t--)
using namespace std;
pair<int,int> a[222222];
int main(){
cases(t){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].first;
a[i].second=i+1;
}
sort(a,a+n);
int ans=-1;
for(int i=0;i<n;i++){
if((i==0||a[i].first!=a[i-1].first)&&(i==n-1||a[i].first!=a[i+1].first)){
ans=a[i].second;
break;
}
}
cout<<ans<<endl;
}
return 0;
}