1. 设置一个数组vis用来记录当前数据num是否在内存空间中,如果在则vis[num]=1,否则为0
  2. 设置一个数组temp来存放文章的单词,即后输入的n个数字;设置pos来指向temp最新存放的数据
  3. 当输入文章单词的时候首先判断它在不在内存中,即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;
}