#include <bits/stdc++.h>
#define N 20003
#define P 131
using namespace std;
typedef vector<long long int> vec;
typedef pair<int,int> PII;
typedef unsigned long long int ULL;
int q[N],a[N],u[N];
int n,m,cnt;
int main()
{
int hh=0,tt=-1;
memset(u,0,sizeof(u));
cin>>m>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
if(!u[a[i]])
{
tt++;
q[tt]=i;
u[a[i]]=1;
cnt++;
}
if(tt-hh>m-1)
{
u[a[q[hh]]]=0;
hh++;
}
}
cout<<cnt<<endl;
return 0;
}
算法1
队列,但是我的队列只存数组下表,然后用u这个数组来用O(1)的时间内判断某个数是否在队列里。