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的主要内容,如果未能解决你的问题,请参考以下文章

NC16589

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

[搜索工具有缺陷,没有找到带有'nc6'的文件,但是找到了很多带有'ivrnc6'的文件-没有意义

这个嵌套类构造函数片段可以应用于泛型类吗?

模型转换为平台特定(NC)代码

NC代码学会的代码规范