1、排序+双指针

交集:

用两个指针分别指向两个数组的头部。如果其中一个元素比另一个小,后移小的那个数组的指针;如果相等,那么把该元素添加到交集里,同时后移两个数组的指针。一直这样操作下去,直到有一个指针超过数组范围。

    public List intersection(int[] a, int[] b){//a和b已经排好序List<Integer> result=new ArrayList<>();int i=0,j=0;while(i<a.length && j<b.length){if(a[i]<b[j]){i++;}else if(a[i]>b[j]){j++;}else{result.add(a[i]);i++;j++;}}return result;}

并集:

用两个“指针”分别指向两个数组的头部。如果其中一个数组的元素比另一个小,把该元素添加到并集里,后移小的那个数组的指针;如果相等,那么把该元素添加到并集里,同时后移两个数组的指针。一直这样操作下去,直到有一个指针超过数组范围。将两个数组中没有遍历完的那个数组的其余元素全部添加进并集里。

      public List union(int[] a, int[] b){//a和b已经排好序List<Integer> result=new ArrayList<>();int i=0,j=0;while(i<a.length && j<b.length){if(a[i]<b[j]){result.add(a[i]);i++;}else if(a[i]>b[j]){result.add(b[j]);j++;}else{result.add(a[i]);i++;j++;}}while(i<a.length){result.add(a[i]);i++;}while(j<b.length){result.add(b[j]);j++;}return result;}

时间复杂度:

O(n)=O(m+n)    //m为第一个数组的长度,n为第二个数组的长度

2、哈希表

交集:

①建立一个哈希表(HashMap),其键(KEY)表示集合中数字的值,其值(VALUE)表示集合中数字出现的次数

②遍历集合A,将集合中的每个数字(KEY)插入哈希表,每个数字的出现次数(VALUE)设置为1

③遍历集合B,对于集合中的每个数字:

如果哈希表中已经存在该数字,将对应的VALUE改为2

如果哈希表中不存在该数字,忽略

④遍历哈希表,输出VALUE为2的数字,即得到A和B的交集

    public List intersection(int[] a, int[] b){List<Integer> result=new ArrayList<>();HashMap<Integer,Integer> hash=new HashMap<>();for(int i=0;i<a.length;i++){hash.put(a[i],1);}for(int j=0;j<b.length;j++){if(hash.containsKey(b[j])){hash.put(b[j],2);}}Iterator<Integer> iter=hash.keySet().iterator();while(iter.hasNext()){int key=iter.next();if(hash.get(key)!=1){result.add(key);}}return result;}

并集:

①建立一个哈希集(HashSet)

②遍历集合A,将集合中的每个数字(KEY)插入哈希集

③遍历集合B,对于集合中的每个数字:

如果哈希集中已经存在该数字,忽略

如果哈希集中不存在该数字,将这个数字插入哈希集

④遍历哈希集,即为A和B的并集

    public HashSet union(int[] a, int[] b){HashSet<Integer> set=new HashSet<>();for(int i=0;i<a.length;i++){set.add(a[i]);}for(int j=0;j<b.length;j++){if(!set.contains(b[j])){set.add(b[j]);}}return set;}

时间复杂度:

O(n)=O(max(m,n))    //m为第一个数组的长度,n为第二个数组的长度

求两个集合的交集和并集相关推荐

  1. java集合操作-----求两个集合的交集和并集

    java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例子测试一下:(例子中以java.util.LinkedList为例) 求连 ...

  2. C/C++ 求两个集合的交集、并集、差集

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610 1.题目:求两个集合的交集.并集.差集 1.1代码 #include <iostream> #include & ...

  3. java 时间段求并集,java集合操作-----求两个集合的交集和并集

    2019独角兽企业重金招聘Python工程师标准>>> java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例 ...

  4. java求两个集合的交集和并集,比较器

    求连个集合的交集: import java.util.ArrayList; import java.util.List; public class TestCollection {public sta ...

  5. c语言求两个字符串的交集,用c语言求两个集合的交集,并集,差集

    满意答案 ibox5 2019.05.05 采纳率:54%    等级:11 已帮助:8963人 #include #include #include #define ARR_LEN 255/*数组长 ...

  6. 求两个集合的交集,并集,差集

    1.  取交集 (A和B都有) List A : { 1 , 2 , 3 , 5 , 9 } List B : { 4 , 3 , 9 } var intersectedList = list1.In ...

  7. C++ 求两个集合的交集和并集

    转载自:https://blog.csdn.net/fanesemyk/article/details/73441347 求并集: #include<bits/stdc++.h> usin ...

  8. Python求两个list的交集、并集、差(补)集、对称差集的方法

    Python求两个list的交集.并集.差(补)集.对称差集的方法 摘要 1. 总结 1.1 求两个list的交.并.差(补).对称差集 - 使用set集合运算符 1.2 求两个list的交.并.差( ...

  9. C++求两个集合的交集

    建立一个类Intersection求两个整数集合的交集,具体要求如下: (1)私有数据成员 int set[20];用数组空间set存储集合 int len:表示该集合中元素的个数 (2)公有成员函数 ...

最新文章

  1. 【Hello CSS】第一章-CSS的语法与工作流
  2. 微软日本每周只上四天班,销售额提升39.9%!网友:老板快来看啊
  3. HDU2504 又见GCD
  4. web 表单,脚本验证
  5. 使用git了解代码编写过程
  6. linux gpt分区看不到,Linux无法看到我的任何分区 – 备份GPT表不在磁盘的末尾
  7. Python | 浅谈并发锁与死锁问题
  8. java 正则提取大于等于号_Java正则表达式
  9. 聚类算法之划分方法(k-means)
  10. 计算机组成原理知识点总结白中英,计算机组成原理知识点总结.pdf
  11. java pdf转jpg字体问题_java生成pdf字体的坑
  12. 解决局域网电脑无法ping通
  13. 光纤跳线的类型和区别?
  14. 跨站脚本攻击(XSS)及防范措施
  15. Springboot项目整合xxl -job
  16. python通信自动化测试_基于Python的无线通信设备自动化测试软件的研制
  17. vue 3.0 使用ref获取dom元素
  18. 查看当前系统 jave 版本 ,Eclipse版本
  19. Qt数据库应用19-图片转pdf
  20. sas mysql乱码_SAS 数据步 常见错误汇总之1-上

热门文章

  1. MATLAB-单元数组
  2. 升级Windows 11 支持安卓应用 | 官方流程
  3. java的大o_学习算法前你需要了解的‘大O表示法’
  4. 使用打印机打印小册子是的注意事项
  5. 易语言多线程封装线程启动优先权设置
  6. 前端项目实战175-ant design form清空表单
  7. java在jvm虚拟机中是如何实现多态的?
  8. 如何判断一个网页是不是一个Blog的首页?
  9. MIC29302WU不调压的问题
  10. 如何开展软件测试工作