唯一最小数原题链接
题目描述:
思路:
用哈希表,记录当前数出现的次数和位置
AC代码:
#include <iostream>
using namespace std;
#include <map>
#include <string>
#include <algorithm>
const int N = 200010;
int arr[N];
int main()
{
int T;
cin >> T;
while(T--)
{
int n;
scanf("%d",&n);
map<int,int> cnt;//记录数出现的次数
map<int,int> mp;//记录数的位置
for(int i = 1; i <= n;i++)
{
cin >> arr[i];
cnt[arr[i]]++;//未赋值的话默认值为0
mp[arr[i]] = i;
}
int flag = 0;
for(map<int,int>::iterator it = cnt.begin();it != cnt.end();it++)
{
if(it->second == 1)
{
cout << mp[it->first] << endl;//map添加元素是有序的,第一个出现次数为1的就是最小值
flag = 1;
break;
}
}
if(!flag)
{
cout << -1 << endl;//没找到
}
}
return 0;
}
y总牛逼:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 200010;
int w[N],cnt[N];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
memset(cnt,0,(n+1)*4);
for(int i = 0; i < n; i++)
{
scanf("%d",&w[i]);
cnt[w[i]]++;
}
int res = -1;
for(int i = 0; i < n; i++)
{
if(cnt[w[i]] == 1)
{
if(res == -1|| w[res] > w[i])
{
res = i;
}
}
}
if(res != -1) res ++;
printf("%d\n",res);
}
return 0;
}