求两个集合的交集
来源:互联网 发布:国内实时数据库 编辑:程序博客网 时间:2024/05/18 03:30
转自:http://www.k6k4.com/blog/show/aaajyefii1506524723567
如:集合A={1,2,3,4}, B={5,3,4}, 结果为:result={3,4}
方法一:排序法
- 思路:先对两个集合进行排序O(nlogn),然后通过一遍查询比较O(n), 即可找出两个集合的交集
- public static void main(String[] args) {
- List<Integer> listA = new ArrayList<Integer>();
- listA.add(1);
- listA.add(2);
- listA.add(3);
- listA.add(4);
- List<Integer> listB = new ArrayList<Integer>();
- listB.add(5);
- listB.add(3);
- listB.add(4);
- //排序O(nlogn)
- Collections.sort(listA);
- Collections.sort(listB);
- //一次遍历O(n)
- for (int i = 0, j = 0; i < listA.size() && j < listB.size(); ) {
- if (listA.get(i) < listB.get(j)) {
- i++;
- } else if (listA.get(i) > listB.get(j)) {
- j++;
- } else {
- System.out.print(listA.get(i) + " ");
- i++;
- j++;
- }
- }
- }
方法二:Hash法
- 思路:将较小的集合放入hash表里O(n),然后逐个遍历大表中的每个元素是否在hash表里O(n),需要消耗O(n)的空间
- public static void main(String[] args) {
- List<Integer> listA = new ArrayList<Integer>();
- listA.add(1);
- listA.add(2);
- listA.add(3);
- listA.add(4);
- List<Integer> listB = new ArrayList<Integer>();
- listB.add(5);
- listB.add(3);
- listB.add(4);
- //将集合B加入Hash表里,耗时O(n), 空间消耗O(size(listB))
- Set<Integer> setB = new HashSet<Integer>();
- for (int i = 0; i < listB.size(); i++) {
- setB.add(listB.get(i));
- }
- //一次遍历O(n)
- for (int i = 0; i < listA.size(); i++) {
- if (setB.contains(listA.get(i))) {
- System.out.print(listA.get(i) + " ");
- }
- }
- }
方法三:集合压缩法
http://blog.csdn.net/jie1991liu/article/details/13168255
方法四:位图法
http://blog.csdn.net/moli152_/article/details/48163351
转自:http://www.k6k4.com/blog/show/aaajyefii1506524723567
阅读全文
0 0
- 求两个集合的交集
- 求两个集合的交集
- 求两个集合的交集
- 求两个集合交集的方法比较
- intersect--求两个集合的交集
- 编程题:给定两个集合,求两个集合的交集
- 求集合的交集
- 以单链表存储的两个集合求交集的算法
- 基本归并算法(求两个集合的交集)
- java求两个集合的交集和并集
- 经典面试题,求两个集合的交集
- java求两个集合的交集和并集
- matlab:求两个集合的 交集 和 并集
- setxor--求两个集合交集的非(异或)
- 求两个集合的交集、差集和并集
- SDUT 离散题目4 求两个集合的交集
- SDUT 离散题目4 求两个集合的交集
- C++ 求两个集合的交集和并集
- Shiro的注解(@RequiresRoles,@RequiresPermissions)授权不起作用
- 学习io流-1
- window10进入“服务”的三种方式
- 去除inline-block元素间间距的N种方法
- 菜鸟程序员对于html页面布局的疑问
- 求两个集合的交集
- 数组
- SSH整合
- JVM调优-java虚拟机内存模型及参数设置
- 构造方法与方法重载(Overload)
- 易接SDK接入:Android手游支付功能接口实现,完整代码奉上
- Win10 如何以管理员身份设置开机自启程序(1)
- mycat结合MySQL双主实现读写分离
- 《移动Web前端高效开发实战》笔记2——使用Gulp构建一个ECMAScript 6和Sass应用