怎样对数组进行交集与并集运算
2018-01-10 11:35
232 查看
以下不代表最优解,只是在学习中突然想到要怎么对数组进行交集与并集的运算
所以在自己尝试写了一遍后记录下来。
int[] a = {1, 2, 3, 4, 5};
int[] b = {2, 3, 5, 6, 7};
输出:
1,2,3,4,5,6,7
我的思路:
两个数组的交集第一时间想到的肯定是最简单的两两比较,如果相等就加进新数组,但是这样做会造成时间的大量浪费,如果两个长度各1W的数组,比较完的时间….不可想象。
然后马上就想到Java的HashSet,重复不添加,所以把所有的数组遍历进Set,再遍历Set岂不是就完成了。
于是很容易实现了我的代码:
int[] a = {1, 2, 3, 4, 5};
int[] b = {2, 3, 5, 6, 7};
输出:
3,4,5
我的思路:与之前相同,强行跑遍历的算法肯定是不可取的,又想到了之前在一堆有重复数的数组中找出唯一一个没有重复的算法:
一是看到的最优解对自身进行^运算。
二是自己思考出的通过HashMap对每个数进行个数统计,如果为1则得出。
同理得出此处交集的运算规则,统计每一个数的出现次数,如果为2,则是交集。
以下为代码实现:
如有更优解或解题思路出错,感谢指出!
所以在自己尝试写了一遍后记录下来。
数组的并集
给定两个数组:int[] a = {1, 2, 3, 4, 5};
int[] b = {2, 3, 5, 6, 7};
输出:
1,2,3,4,5,6,7
我的思路:
两个数组的交集第一时间想到的肯定是最简单的两两比较,如果相等就加进新数组,但是这样做会造成时间的大量浪费,如果两个长度各1W的数组,比较完的时间….不可想象。
然后马上就想到Java的HashSet,重复不添加,所以把所有的数组遍历进Set,再遍历Set岂不是就完成了。
于是很容易实现了我的代码:
int[] a = {1, 2, 3, 4, 5}; int[] b = {2, 3, 5, 6, 7}; HashSet<Integer> hashSet = new HashSet<>(); for (int aNum : a) { hashSet.add(aNum); } for (int bNum : b) { hashSet.add(bNum); } Iterator<Integer> iterator = hashSet.iterator(); while(iterator.hasNext()){ System.out.print(iterator.next()+" "); }
数组的交集
给定两个数组:int[] a = {1, 2, 3, 4, 5};
int[] b = {2, 3, 5, 6, 7};
输出:
3,4,5
我的思路:与之前相同,强行跑遍历的算法肯定是不可取的,又想到了之前在一堆有重复数的数组中找出唯一一个没有重复的算法:
一是看到的最优解对自身进行^运算。
二是自己思考出的通过HashMap对每个数进行个数统计,如果为1则得出。
同理得出此处交集的运算规则,统计每一个数的出现次数,如果为2,则是交集。
以下为代码实现:
int[] a = {1, 2, 3, 4, 5}; int[] b = {2, 3, 5, 6, 7}; HashMap<Integer, Integer> hashMap = new HashMap(16); for (int i = 0; i < a.length; i++) { if (hashMap.get(a[i]) != null) { hashMap.put(a[i], hashMap.get(a[i]) + 1); } else { hashMap.put(a[i], 1); } } for (int i = 0; i < b.length; i++) { if (hashMap.get(b[i]) != null) { hashMap.put(b[i], hashMap.get(b[i]) + 1); } else { hashMap.put(b[i], 1); } } for (int i : hashMap.keySet()) { if (hashMap.get(i).equals(2)) { System.out.print(i+" "); } } }
如有更优解或解题思路出错,感谢指出!
相关文章推荐
- 构建一个类,对集合进行运算,包括求集合的交集,并集和差集。
- LINQ操作数组(交集,并集,差集,最值,平均,去重复)
- SQL集合运算 差集 并集 交集
- java集合运算:求交集,并集,集合差
- php取不定个数数组交集、并集(以空间换时间)
- Java求字符串数组交集 并集 差集 去重复并集
- 求两个数组的交集、并集和差集算法分析与实现(转自http://blog.sina.com.cn/s/blog_616e189f0100mrdn.html)
- SQL集合运算 差集 并集 交集
- LINQ操作数组(交集,并集,差集,最值,平均,去重复)
- C#最简易版求数组和datatable的并集交集差集
- js取两个数组的交集|差集|并集|补集|去重示例代码
- 求两个数组的交集和并集
- C#对List中的数据进行取交集、并集、差集和去重操作的方法
- List 交集、并集、差集运算
- 数组的交集、并集……
- List之Union(),Intersect(),Except() 即并集,交集,差集运算。
- 算法兴趣-----求两个已排序数组的交集和并集(算法复杂度O(N+M))
- JAVA程序:字符串数组交集、并集和差集
- js取数组两个数组的交集|差集|并集|补集|去重
- 程序是怎样跑起来的-第03章 计算机进行小数运算时出错的原因