• 这题较为简单,比较关键的是内存满时的清空最早单词,要记录计入内存的顺序
  1. 利用队列queue记录数字进入内存顺序,数字范围较小0~1000,可以用数组记录是否在内存里;
  2. 判断数字是否在内存数组里,没有的话,将其计入内存数组,记录次数,判定内存是否满了,满了队列要弹出第一个元素并清除内存数组。最后都要进入队列中
  • 代码如下
#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;
}