看到这个题目,想到的是滑动窗口的题,不过感觉要比滑动窗口简单点。
内存中最多只能放m个数,就是维护一个长度为m的窗口,如果在这个窗口里面 找到了,那就OK,查下一个。如果没找到,那么首先先看窗口是否满了,满了的话把队头弹出即hh++,在队尾加上新的元素,如果没满,直接加上新的元素即可
贴个自己的代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 1010,M = 110;
int n,m;
int a[N];
int q[M];
int main()
{
cin >> m >> n;//内存容量 文章大小
for(int i = 0;i < n;i ++) cin >> a[i];
int hh = 0,tt = -1,res = 0;;
for(int i = 0;i < n;i ++)
{
bool flag = false;
for(int j = hh;j <= tt;j ++)
{
if(a[q[j]] == a[i])//内存里找到了
{
flag = true;
break;
}
}
if(!flag)//如果内存里面没有
{
//如果内存满了
if(tt - hh + 1 >= m) hh ++;
q[++ tt] = i;
//for(int j = hh;j <= tt;j ++) printf("%d ",a[q[j]]);
//puts("");
res ++;
}
}
cout << res << endl;
return 0;
}