题目链接:https://www.luogu.org/problemnew/show/P1540
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn = 1010;
const int maxm = 110;
int num;//记录查找的次数
int A[maxn],have[maxn];//have[i]记录当前的内存中是否有i这个单词
int m , n , size;
int main(void)
{
queue<int>Q;
cin>>m>>n;
for(int i=1;i<=n;i++)
{
cin>>A[i];
if(have[A[i]]==false)
{
num++;//增加一次查找次数
if(size<=m-1)
{
Q.push(A[i]);
have[A[i]]=true;
size++;
}
else
{
int x=Q.front();
Q.pop();
Q.push(A[i]);
have[x]=false;
have[A[i]]=true;
}
}
}
cout << num;
return 0;
}
eg.这里使用桶的思想和队列进行结合,效率比较好