NC16589
Posted TzZzEZ-web
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NC16589相关的知识,希望对你有一定的参考价值。
NC16589
解析
这一题我的第一反应是队列,再开一个数组用于查找是否已经存过,数组最大不超过1000,很小,所以可以的。我用了两种方法,一种是队列,一种是数组。
//队列
#include<bits/stdc++.h>
using namespace std;
//记录是否被存储
int mp[1005];
queue<int> q;
int m,n;
int main(){
cin>>m>>n;
//记录查找次数
int res=0;
//输入
int num;
for(int i=0;i<n;i++){
cin>>num;
if(mp[num]!=1){
res++;
if(q.size()==m){
mp[q.front()]=0;
q.pop();
}
q.push(num);
mp[num]=1;
}
}
cout<<res<<endl;
return 0;
}
//数组
#include<bits/stdc++.h>
using namespace std;
//m是最大存储个数,n是文章长度
int m,n;
//记录是否被存储
int mp[1005];
//记录输入
int vis[1005];
//记录输入的数组的位置
int tmp;
int main(){
cin>>m>>n;
//记录当前存储的个数
int count=0;
//记录查找次数
int res=0;
//输入
int num;
for(int i=0;i<n;i++){
cin>>num;
//存储过,就跳过
if(mp[num]==1) continue;
//否则查询次数+1
res++;
//如果空间满了
if(count>=m){
//将最先存进内存的删除
mp[vis[tmp-m]]=0;
//将数据放入
mp[num]=1;
//将数据记录
vis[tmp++]=num;
}
else{
mp[num]=1;
vis[tmp++]=num;
count++;
}
}
cout<<res<<endl;
return 0;
}
以上是关于NC16589的主要内容,如果未能解决你的问题,请参考以下文章
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段