去重(求两个集合的并集)的几种方法

哈希表

能解决

  • 去重问题
  • 统计重复元素的个数
  • 从小到大按一定顺序输出

但是根据哈希表的特点,哈希表无法记录元素进入的顺序

#include<cstdio>
int re[6] = {0};//哈希表的最大值应该大于等于待去重数组中的最大值 
int main(){
	int arr[] = {1,3,3,4,2,1,1,5,4};//换成char一样,128ASII打表 
	for(int i = 0;i <sizeof(arr)/sizeof(arr[0]);i++){
		re[arr[i]]++;
	}
	for(int i = 0;i <6;i++){
		if(re[i]){
			printf("%d",i);
		}
	}

}

使用set

用于哈希表无法开到太大的时候,更简洁,也会从小到大输出

#include<cstdio>
#include<set>
using namespace std;

int main(){
	set<int> s;
	s.insert(1);
	s.insert(3);
	s.insert(1);
	s.insert(1);
	s.insert(4);
	for(set<int>::iterator it = s.begin();it != s.end();it++){
		printf("%d ",*it);
	}
} 

求交补差集合

可以通过哈希表或者一一穷举的方法确定交集,通过集合运算确定其他集合

posted @ 2018-05-07 10:13  amojury  阅读(1179)  评论(0编辑  收藏  举报