去重(求两个集合的并集)的几种方法
哈希表
能解决
- 去重问题
- 统计重复元素的个数
- 从小到大按一定顺序输出
但是根据哈希表的特点,哈希表无法记录元素进入的顺序
#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);
}
}
求交补差集合
可以通过哈希表或者一一穷举的方法确定交集,通过集合运算确定其他集合