Intersection of Two Arrays II--求交集
来源:互联网 发布:在英国怎么淘宝购物 编辑:程序博客网 时间:2024/06/06 11:49
题意:
求两集合的交集
本来第一个想法是:用两个map存两个数组的数据,key存放下标i,value存放数组值,再将其中一个map1迭代与看另一个map2中是否包含相同的value数据,有相同的则去除map2中的这条数据(这里的删除操作就有一次循环了),再将这条数据放入另建的一个list中,继续迭代。这种方法确实是效率低下,光存放数据的两个map就要占很大的内存空间了,要是两个数组数据量比较大都会内存溢出了,而且时间复杂度也是n*n,比较大了。
还是下面这种解法比较靠谱:
先将数组一存进一个map中,key存放数组数据值,value存放该数据在数组中出现的次数,循环数组二,判断数组二中的每个数据在map的key中是否存在,存在则将该数据添加进一个list中,对应key的value值减1,当value值为1时,就不减1直接remove掉该数据。这样的解法空间复杂度直接减少了一半,时间复杂度也降低为了n。解法如下:
public int[] intersect(int[] nums1, int[] nums2) { int i = 0, len1 = nums1.length, len2 = nums2.length; List<Integer> list = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); for (i = 0; i < len1; i++) { if (map.containsKey(nums1[i])) { map.put(nums1[i], map.get(nums1[i]) + 1); } else { map.put(nums1[i], 1); } } for (i = 0; i < len2; i++) { if (map.containsKey(nums2[i])) { list.add(nums2[i]); if (map.get(nums2[i]) > 1) { map.put(nums2[i], map.get(nums2[i]) - 1); } else { map.remove(nums2[i]); } } } int size = list.size(); int[] intersection = new int[size]; for (i = 0; i < size; i++) { intersection[i] = list.get(i); } return intersection; }
阅读全文
0 0
- Intersection of Two Arrays II--求交集
- (LeetCode)Intersection of Two Arrays II --- 求交集,不去重
- (LeetCode)Intersection of Two Arrays --- 求交集
- [LeetCode]350. Intersection of Two Arrays II(求两个数组交集 II)
- leetcode-350 Intersection of Two Arrays II 求两个数组的交集 面试见到了吗?
- leetcode—350. Intersection of Two Arrays II 求两个list的交集
- 350. Intersection of Two Arrays II (求两个数组的交集,包含重复元素)
- Leetcode:350. Intersection of Two Arrays II 求两个数组的交集
- LeetCode 350. Intersection of Two Arrays II(数组交集)
- Intersection of Two Arrays II两个数组交集(重要!)
- Intersection of Two Arrays--求两个向量的交集
- Intersection of Two Arrays II
- Intersection of Two Arrays II
- Intersection of Two Arrays II
- Intersection of Two Arrays II
- Intersection of Two Arrays II
- Intersection of Two Arrays II
- Intersection of Two Arrays II
- OpenJudge百炼-2706-麦森数-C语言-高精度计算
- uefi bios debug 终级方案 反汇编
- Git命令
- [设计模式]单例模式
- 【Unity】【C#】【Code】List示例代码
- Intersection of Two Arrays II--求交集
- iput利用正则表达式动态监控数据实现输入金额(限制整数输入位数和两位小数)
- java数据结构与算法-简单排序-选择排序
- putback()
- [leetcode]480. Sliding Window Median
- 进程间通信之消息队列
- Java:final关键字 详解
- jQuery中$.ajax()的get 方法
- 免押金渠道上线后产生bug