- 设置一个数组vis用来记录当前数据num是否在内存空间中,如果在则vis[num]=1,否则为0
- 设置一个数组temp来存放文章的单词,即后输入的n个数字;设置pos来指向temp最新存放的数据
- 当输入文章单词的时候首先判断它在不在内存中,即vis[num]是否为1
(1)如果在,则跳出当前循环,进入下一次循环,即读取文章的下一个单词
(2)如果不在,则判断内存空间是否满;如果满,则将当前内存中最早输入的数据置为0,即vis[temp[pos-m]]=0;将新数据插入到vis和temp中。
#include <iostream>
using namespace std;
int vis[1010]; //记录已经在内存空间数字,在内存空间的数字标记为1
int temp[1010]; //每输入一个数据,则将数据放入该数组中。按顺序存放
int tempPos; //记录temp数组的位置
int m; //记录内存空间的大小
int n; //记录文章的长度;
int main(void)
{
cin >> m >> n;
int count = 0; //记录内存空间中的数字个数
int cnt = 0; //记录查找字典的次数
int num; //记录输入进来的文章
int i;
for(i = 1; i <= n; i++)
{
cin >> num;
//如果数字在内存空间中,则进入下一次循环
if(1 == vis[num]) continue;
//查字典次数+1
cnt++;
//如果内存空间满了
if(count >= m)
{
vis[temp[tempPos-m]] = 0; //将最先进入内存空间的数字置空
//将数据放入内存空间
vis[num] = 1;
//将数据放入temp中记录
temp[tempPos++] = num;
}
else
{
//将数据放入内存空间
vis[num] = 1;
//将数据放入temp中记录
temp[tempPos++] = num;
count++;
}
}
cout << cnt << endl;
return 0;
}