题目大意:有一个长度为n的数组,可以对数组进行操作,每次操作移除数组最靠前的一个数,问至少经过多少次操作,能使数组中没有重复的数字
思路:从后向前遍历数组,标记遇到的数,如果遍历到标记过的数,就输出当前位置,如果一直没有遍历到标记过的数,就输出0
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int a[N];
bool cnt[N];
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
bool temp = 1;
for (int i = n; i >= 1; i--)
{
if (cnt[a[i]] == 0)
{
cnt[a[i]] = 1;
}//标记没出现过的数
else
{
printf("%d\n", i );//要删除的数的数量就是遇到标记过的数的位置
temp = 0;
break;
}
}
memset(cnt, 0, sizeof cnt);
if (!temp)
continue;
printf("0\n");
}
return 0;
}