需要注意的地方是:M个词已经加入队列的时候,需要判断的是下一个词如果能在队列中找到,则head不用向前
#include <stdio.h>
int main()
{
int n,m,head,t = 0,tail,i = 0,count = 0;
int a[1005],q[1005];
scanf("%d%d",&m,&n);
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
int flag = 0;
head = 0;
tail = 0;
for(i = 0;i < n;i++)//待查找
{
if(tail==0)//直接加入,内存中没有任何单词,需要查字典
{
q[tail++] = a[i];
count++;
}
else
{
//查重
for(int j = head;j < tail;j++)
{
if(q[j]==a[i])
{
flag = 1;
}
}
if(flag==0)//队列中无该单词,需要查字典
{
q[tail++] = a[i];
count++;
if((tail-head)>m)//移出
{
head++;
}
}
flag = 0;
}
}
printf("%d\n",count);
return 0;
}