[數組的簡單運用]
給定一個長度為 n 的整數數組 a1,a2,…,an。
請你找到數組中隻出現過一次的數當中最小的那個數。
輸出找到的數的索引編号。
a1 的索引編号為 1,a2 的索引編号為 2,…,an 的索引編号為 n。
輸入格式
第一行包含整數 T,表示共有 T 組測試資料。
每組資料第一行包含整數 n。
第二行包含 n 個整數 a1,a2,…,an。
輸出格式
每組資料輸出一行結果,即滿足條件的數的索引編号,如果不存在滿足條件的數,則輸出 −1−1。
資料範圍
1≤T≤2×104
1≤n≤2×105
1≤ai≤n
同一測試點内的所有 n 的和不超過 2×105
輸入樣例:
6
2
1 1
3
2 1 3
4
2 2 2 3
1
1
5
2 3 2 4 2
6
1 1 5 5 4 4
輸出樣例:
-1
2
4
1
2
-1
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int T;
const int N=200010;
int cnt[N],w[N];
int n,res;
int main()
{
cin>>T;
while(T--)
{
res=-1;
memset(cnt,0,(n+1)*4); //重置 cnt數組 *4是因為memset按位元組運作
cin>>n;
//記錄每個數字出現的次數
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
cnt[w[i]]++;
}
//選擇出 隻出現一次的資料 且 該資料 較小
for(int i=1;i<=n;i++)
{
if(cnt[w[i]]==1)
{
if(res==-1||w[res]>w[i])
res=i;
}
}
cout<<res<<endl;
}
}
[www.acwing.com] y總yyds
—奇牛學院
歡迎各位大佬提出建議或讨論