算法1
1,输入的时候,检验当前数是否在内存中。
2,技巧使用两个队列,每次复制原队列给B队列,然后遍历b队列,找到则返回true
3,没有找到则判断队列是否满,满了则从队头弹出,然后从队尾入新插入的数,并返回false
时间复杂度
输入m个数,一共检验m次每次检验会遍历队列长度次 所以时间复杂度(m*n)
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int q[1001];
queue<int> a;
queue<int> b;
bool check(int s,int n) //检验数是否在内存中,在则返回true不在则返回false
{
int len = a.size(); //复制a队列给b队列
int t=len;
b=a;
while(t--) //遍历b队列 看队列中是否存在要找的数 有则返回 true
{
if(b.front()==s) return true;
b.pop();
}
if(len==n) //队满 踢出队头
{
a.pop();
}
a.push(s); //队尾入
return false; //返回false 代表未找到
}
int main()
{
int n,m,num,res=0;
cin>>n>>m;
for(int i=1;i<=m;i++)//每次输入num
{
cin>>num;
if(check(num,n)==false) res++; //判断num是否在内存中 不在则返回false 计算器++
}
cout<<res;
return 0;
}