分析:
a作为一个长数组,存入所有需要进入内存的单词
m为内存大小,相当于大小为m的窗口,获取a中最后m个内容。
vis作为标记,判断内存中是否存在此单词。
int main()
{
int m,n;
cin >> m >> n;
int a[1010]; //长数组,存入所有单词(m为窗口大小)
int vis[1010]; //标记存入的单词,表示内存中单词是否存在
int cnt = 0; //查找次数
for(int i = 0; i < n; i++)
{
int x;
cin >> x;
if(vis[x] == 1)continue;
a[cnt++] = x;
vis[x] = 1;
if(cnt > m)
{
vis[a[cnt-m-1]] = 0;
}
}
cout << cnt << endl;
return 0;
}
(1)cnt++ 是先运算再+1
(2)++cnt 是先+1再运算
如果写成
a[++cnt] = x;那么数组a是从 a[1] 位置开始存单词
vis[a[cnt-m-1]] = 0;要写成
vis[a[cnt-m]] = 0;

京公网安备 11010502036488号