1. 两个数组的交集
    给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:

输出结果中的每个元素一定是唯一的。(这个就表示不允许重复)
我们可以不考虑输出结果的顺序。

class Solution {public int[] intersection(int[] nums1, int[] nums2) {int len1 = nums1.length, len2 = nums2.length;HashSet<Integer> set = new HashSet<>();HashSet<Integer> s2 = new HashSet<>();for(int i = 0; i < len1; i++){set.add(nums1[i]);}for(int i = 0; i < len2; i++){if(set.contains(nums2[i])){s2.add(nums2[i]);}}int[] res = new int[s2.size()];int i= 0;for(int nn: s2){res[i++] = nn;}return res;}
}

2.利用内置函数

class Solution {public int[] intersection(int[] nums1, int[] nums2) {int len1 = nums1.length, len2 = nums2.length;HashSet<Integer> set = new HashSet<>();HashSet<Integer> s2 = new HashSet<>();for(int i = 0; i < len1; i++){set.add(nums1[i]);}for(int i = 0; i < len2; i++){s2.add(nums2[i]);}//利用内置函数set.retainAll(s2);int[] res = new int[set.size()];int i= 0;for(int nn: set){res[i++] = nn;}return res;}
}

L350

  1. 两个数组的交集 II
    给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。
进阶:

如果给定的数组已经排好序呢?你将如何优化你的算法?
如果 nums1 的大小比 nums2 小很多,哪种方法更优?
如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
1使用hashmap计算次数、

class Solution {public int[] intersect(int[] nums1, int[] nums2) {int len1 = nums1.length, len2 = nums2.length;if(len1 > len2) return intersect(nums2, nums1);//直接交换就可以了HashMap<Integer, Integer> map = new HashMap<>();//改用hashMap,记录元素的个数//这里最终的结果允许出现重复的for(int nn :nums1){map.put(nn ,map.getOrDefault(nn, 0) + 1);}int k = 0;int [] ans = new int[len1];//现在大小不确定,但是可以使用函数for(int nn: nums2){int cnt = map.getOrDefault(nn, 0);//注意不能直接使用getif(cnt > 0){ans[k++] = nn;map.put(nn, map.get(nn) - 1);//每取一次,就-1}}return Arrays.copyOfRange(ans, 0, k);}}

当输入数据是有序的,推荐使用此方法。在这里,我们对两个数组进行排序,并且使用两个指针在一次扫面找出公共的数字。

class Solution {public int[] intersect(int[] nums1, int[] nums2) {int len1 = nums1.length, len2 = nums2.length;//先排序Arrays.sort(nums1);Arrays.sort(nums2);int i = 0, j = 0, k = 0;int ans[] = new int[len1];while(i < len1 && j < len2){//只要有一个到结尾就停下来if(nums1[i] < nums2[j]){i++;}else if(nums1[i] > nums2[j]){j++;}else {//如果相同ans[k++] = nums1[i++];j++;}}return Arrays.copyOfRange(ans, 0, k);}}

解法三:通过归并外排将两个数组排序后再使用排序双指针查找
对应进阶问题三,如果内存十分小,不足以将数组全部载入内存,那么必然也不能使用哈希这类费空间的算法,只能选用空间复杂度最小的算法,即解法一。

但是解法一中需要改造,一般说排序算法都是针对于内部排序,一旦涉及到跟磁盘打交道(外部排序),则需要特殊的考虑。归并排序是天然适合外部排序的算法,可以将分割后的子数组写到单个文件中,归并时将小文件合并为更大的文件。当两个数组均排序完成生成两个大文件后,即可使用双指针遍历两个文件,如此可以使空间复杂度最低。

L349. L350两个数组的交集相关推荐

  1. L350 两个数组的交集 ii leetcode

    1. 一个错误的思路:用小的那个数组,逐个扫描大的数组,如果存在,就加入新Arraylist.但是,这个算法有个很严重的问题,没有考虑次数 比如: {3,1,2} {1,1} 这样输出的是{1,1}, ...

  2. 两个数组的交集 II

    两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 ...

  3. 数组-两个数组的交集(两个集合)

    题意: 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5] ...

  4. 9.LeetCode第350题---两个数组的交集2

    一.目的 记录本题的主要目的是想让自己以及大家记住一个Java中的一个函数,可以去除数组中的后面无用的零 方法是Arrays.copyOfRange(res,0,index); 另外需要注意的是本题与 ...

  5. php 两个数组求交集_如何求两个数组的交集

    题目描述 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2] 示例 2: 输入:nums1 = [4,9,5] ...

  6. Leetcode 350. 两个数组的交集 II 解题思路及C++实现

    解题思路: 和349. 两个数组的交集 这道题目很相似,这道题只是在返回的数组中,多了重复的数字,其实相较于349题,350题更简单. 先对两个数组进行排序,然后遍历这两个数组,找到相同的数字之后,就 ...

  7. 350. Intersection of Two Arrays II 两个数组的交集 II

    Title 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = ...

  8. php两个数组找公共部分,PHP开发中如何查找两个数组的交集

    在PHP中,可以使用内置函数array_intersect()来查找两个数组的交集,它可以返回两个数组的公共元素(相交部分).下面我们就来具体介绍一下. array_intersect()函数 基本语 ...

  9. leetcode初级算法4.两个数组的交集 II

    leetcode初级算法4.两个数组的交集 II 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] intersect(int[] nums1, in ...

最新文章

  1. 代码对比工具,我就用这 6 个!
  2. 快速了解上市公司年报
  3. C++ share_prt 简单设计和实现
  4. Linux 命令之 eval -- 对参数执行两次解释
  5. 今天的我们班胜利了的飞鸽传书
  6. Python加权图的邻接表邻接矩阵之转换
  7. sql server 部署_将程序包部署到SQL Server集成服务目录(SSISDB)
  8. JSTL 学习、应用记录
  9. mysql 图文安装_mysql安装图解mysql图文安装教程(详细说明)
  10. [Java反序列化]AspectJWeaver反序列化
  11. matlab机器学习库
  12. 超级搜索(Super search)
  13. python爬取全国真实地址_python爬虫学习之爬取全国各省市县级城市邮政编码
  14. -XX:+PrintGCTimeStamps -XX:+PrintGCDetails 日志分析
  15. mix3android auto,小米MIX3滑盖全面屏值不值得买?三天真实体验说说优缺点
  16. 2020-10-18Go语言接口
  17. Docker 容器技术(史上最强总结)
  18. 基于SSM技术的医院在线预约诊疗系统设计与实现毕业设计源码011130
  19. 使用Remmina远程登录Ubuntu系统并实现文件共享(可实现类似Teamviewer功能)
  20. HTML5简介(补充. 浏览器私有前缀)

热门文章

  1. 【数组指针】 仅此一篇 让你深刻理解数组指针
  2. 江苏苏州|第七届“祖冲之杯”昆山创新创业大赛上海智能制造装备与技术选拔赛项目征集公告
  3. leaflet暗色系地图样式地图(滤镜实现,反色滤镜)(leaflet篇.10)
  4. QT传输函数控件设计10 包含小圆点的图形项
  5. 计薪日21.75和工作日20.83是如何算出来的,有什么区别
  6. 中国PPP管理库项目累计投资额13.2万亿元
  7. 内存管理(四)——虚拟内存
  8. CComboBox控件详解
  9. 基于 Laravel-Admin 在十分钟内搭建起功能齐全的后台模板
  10. 如何开发、本地测试、发布 Laravel 扩展包?Class ‘Angkee\Admin\AdminServiceProvider‘ not found