- 这题较为简单,比较关键的是内存满时的清空最早单词,要记录计入内存的顺序
- 利用队列queue记录数字进入内存顺序,数字范围较小0~1000,可以用数组记录是否在内存里;
- 判断数字是否在内存数组里,没有的话,将其计入内存数组,记录次数,判定内存是否满了,满了队列要弹出第一个元素并清除内存数组。最后都要进入队列中
#include <iostream>
#include<string>
#include<queue>
using namespace std;
queue<int>w;//寄存进入内存顺序
bool num[1005];//判定数字是否进入内存
int main()
{
int m, n ,x ,ct=0;
cin >> m >> n;
for (int i = 0; i < n; i++)
{
cin >> x;
if (!num[x])//未进入内存
{
num[x] = true;//计入内存
ct++;//记录次数
if (w.size() >= m)//当容量已满
{
num[w.front()] = false;//将最前面数字记录清除
w.pop();//弹出最前面的数字
}
w.push(x);//计入数字顺序
}
}
cout << ct;
return 0;
}