[洛谷]P4305 [JLOI2011]不重复数字

本文介绍了一种使用哈希表进行数据去重的算法,适用于处理大量数值型数据的去重需求。通过C++实现,利用哈希函数定位元素,有效避免重复数据输出,提高数据处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目网址

题目大意

给出N个数,去重

题目解析

可以用Hash或Map,这里介绍Hash方法
Hash用来处理一个元素是否在一个集合内
当输入的数x不哈希表里则输出并加入哈希表,即可
(这题会卡 cin/cout)

代码

#include<bits/stdc++.h>
#define p 100007//质数 
#define h(x) x%p
using namespace std;
int T,n,x;
int a[p];
int loc(int x)
{
	int k=h(abs(x)),i=0;
	while(a[(k+i)%p]!=0&&a[(k+i)%p]!=x)
	 i++;
	return (k+i)%p;
}//查找关键字在哈希表的位置 
int main()
{
	scanf("%d",&T);
	while(T>0)
	{
	  memset(a,0,sizeof(a));
	  T--;
	  scanf("%d",&n);
	  for(int i=1;i<=n;i++)
	  {
	  	scanf("%d",&x);
	    int t=loc(x);
	    if(a[t]!=x) 
	    {
	      a[t]=x;//放入哈希表里 
	      cout<<x<<" ";//输出 
		}
	  }
	  cout<<endl;
	}	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值