分析:
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;