初级算法-06-两个数组的交集 II
2021/5/14 1:25:12
本文主要是介绍初级算法-06-两个数组的交集 II,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 题目:
给定两个数组,编写一个函数来计算它们的交集。 - 实例:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
说明:
1. 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
2. 我们可以不考虑输出结果的顺序。
进阶:
1. 如果给定的数组已经排好序呢?你将如何优化你的算法?
2. 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
3. 如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎ban?
- 思路:
- 用HashMap记录长度较小的数组元素及其出现的次数,然后遍历长度较长的数组,如果有和哈希表中的元素相同,则哈希表中计数减一,并将相同元素计入交集,如果计数器中元素计数小于1,则剔除该元素。
- 先排序,从头开始比较,若相等,则计入交集,否则较小元素数组前进一位,直到某一个数组,长度溢出就停止。
- 代码:
class Solution { public int[] intersect(int[] nums1, int[] nums2) { if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) return new int[]{}; return method2(nums1, nums2); } public int[] method1(int[] nums1, int[] nums2) { int len1 = nums1.length; int len2 = nums2.length; if (len2 < len1) { intersect(nums2, nums1); // 默认nums1更短 } HashMap<Integer, Integer> map = new HashMap<>(); for (int num1: nums1) { map.put(num1, map.getOrDefault(num1, 0) + 1); } int[] intersect = new int[len1]; int index = 0; for (int num2: nums2) { int count = map.getOrDefault(num2, 0); if (count > 0) { intersect[index++] = num2; count--; if (count > 0) { map.put(num2, count); // 更新hash表的信息 } else { map.remove(num2); } } } return Arrays.copyOfRange(intersect, 0, index); } public int[] method2(int[] nums1, int[] nums2) { // 假设实现排好序的 Arrays.sort(nums1); Arrays.sort(nums2); int[] intersect = new int[Math.min(nums1.length, nums2.length)]; int index1 = 0, index2 = 0, index = 0; while (index1 < nums1.length && index2 < nums2.length) { if (nums1[index1] < nums2[index2]) { index1++; } else if (nums1[index1] > nums2[index2]) { index2++; } else { intersect[index++] = nums1[index1++]; index2++; } } return Arrays.copyOfRange(intersect, 0, index); } }
这篇关于初级算法-06-两个数组的交集 II的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性
- 2024-05-29哪些无用敏捷指标正在破坏敏捷转型?
- 2024-05-29鸿蒙原生应用再新丁!新华社 入局鸿蒙
- 2024-05-29设计模式 之 迭代器模式(Iterator)