leetCode 两个数组的交集 II 问题记录
问题如下:
给定两个数组,写一个方法来计算它们的交集。例如: 给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].注意:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。 跟进:如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更优? 如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办?
自己的解法:
class Solution {public int[] intersect(int[] nums1, int[] nums2) {HashMap<Integer,Integer> hashMap = new HashMap<>();ArrayList<Integer> result = new ArrayList<>();if (nums1.length > 0){for (int i =0;i<=nums1.length-1;i++){Integer temp = hashMap.get(nums1[i]);if (temp == null){hashMap.put(nums1[i],1);}else {hashMap.put(nums1[i],temp+1);}}for(int j=0;j<=nums2.length-1;j++){Integer temp = hashMap.get(nums2[j]);if (temp != null){result.add(nums2[j]);if (temp> 1){hashMap.put(nums2[j],temp-1);}else {hashMap.remove(nums2[j]);}}}}Integer[] integers = new Integer[result.size()];result.toArray(integers);int tmpInt[] = new int[result.size()];for (int i = 0; i < integers.length; i++) {tmpInt[i] = integers[i];}return tmpInt;} }
思路: 1.先遍历数组1,将数组的每一项存入一个hashMap,如果一个元素出现多次则hashmap的value+1
2.遍历数组2,判断当前元素在hashmap中是否存在,如果存在就将这个元素加入到result中
3.判断当前元素的value,如果大于1则减1,否则将这个元素的key从hash中移除,
4.最终得到的就是所求的两个数组重复的部分
leet给的最优解
class Solution {public int[] intersect(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2 = nums2.length;int len = len1 > len2 ? len2 : len1;Arrays.sort(nums1);Arrays.sort(nums2);int[] nums = new int[len];int k = 0;int curr1, curr2 = 0;for(int i = 0, j = 0; i < len1 && j < len2;) {curr1 = nums1[i];curr2 = nums2[j];if(curr1 == curr2) {nums[k] = curr1;k += 1;i += 1;j += 1;} else if(curr1 < curr2) {i += 1;} else {j += 1;}}return Arrays.copyOfRange(nums, 0, k); } }
尝试理解一下思路:
1.找到两个数组中相对较短的哪一个
2.对两个数组进行排序
3.从0开始遍历两个数组,判断当前遍历到的数组1和数组2元素是否相等,如果相等表示两个数组重复的部分开始,将这个元素放在返回数组中指示标志k所在的位置然后k+1
4.遍历玩两个数组后对返回数组进行截取,得到重复部分的数组
转载于:https://www.cnblogs.com/beliveli/p/9015085.html
leetCode 两个数组的交集 II 问题记录相关推荐
- leetcode 两个数组的交集 II
61 / 61 个通过测试用例 状态:通过 执行用时:2 ms 内存消耗:36.6 MB class Solution {//本代码来自[email protected]进击之路public int[ ...
- leetcode初级算法4.两个数组的交集 II
leetcode初级算法4.两个数组的交集 II 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] intersect(int[] nums1, in ...
- 两个对象数组交集_yiduobo的每日leetcode 349.两个数组的交集 amp;amp; 350.两个数组的交集II...
祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧 349.两个数组的交集https://leetcode-cn.com/problems/intersection ...
- leetcode系列-350.两个数组的交集II
leetcode系列–第350题.两个数组的交集II 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集. 返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一 ...
- LeetCode算法题350:两个数组的交集II(Intersection of Two Arrays II)
技术交流可以加: 本人微信:xcg852390212 本人qq:852390212 学习交流qq群1(已满): 962535112 学习交流qq群2: 780902027 两个数组的交集II Leet ...
- LeetCode 350. 两个数组的交集 II
350. 两个数组的交集 II 难度简单640收藏分享切换为英文接收动态反馈 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集.返回结果中每个元素出现的次数,应与元素在两 ...
- 两个数组的交集 II
两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 ...
- LeetCode 350. 两个数组的交集 II ntersection of Two Arrays II
Table of Contents 一.中文版 二.英文版 三.My answer 四.解题报告 一.中文版 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2 ...
- Leetcode 350. 两个数组的交集 II 解题思路及C++实现
解题思路: 和349. 两个数组的交集 这道题目很相似,这道题只是在返回的数组中,多了重复的数字,其实相较于349题,350题更简单. 先对两个数组进行排序,然后遍历这两个数组,找到相同的数字之后,就 ...
最新文章
- mpvue 引入自己创建的js 文件 到其他的文件中
- ORACLE 将SQL的执行脚本返回值传给SHELL
- NHibernate:no persister for 异常
- ksoap2-android Project
- 【kafka】kafka RecordAccumulator封装消息流程
- SAP License:煤化工行业名词MTOMTP
- 开博1个月不到,照样可以申请到text-link-ads
- 文本文件的输入输出流(这里的重点在于字符集问题)
- 56个民族静态字典代码创建sql语句
- 轻量级深度神经网络推理引擎——阿里巴巴的 MNN
- 3D变化——旋转的立方体
- Material-design icon生成插件
- cad无法安装_CAD软件下载好了,为什么安装不上?有两个原因,解决方法在这
- 日记侠:如何用手机月入万元,只需从这5步开始
- 基于Redis生成递增序号
- 云原生关乎文化,而不是容器
- [ 习题 ] 句子简化题 细节题 排除题
- IT牛们的bat面试心得与经验总结
- Arithmetic Slices 算术序列
- 2021年上海市安全员C证考试报名及上海市安全员C证试题及解析
热门文章
- IE – File - Work Offline
- 在linux下安装星际译王
- asp.net 中GridView控件实现全选及反选的功能
- Python函数式编程——map()、reduce()
- golang中的文件读写
- 前端三十二:超链接(a标签)
- C六:指针可以比较大小
- Leetcode PHP题解--D57 762. Prime Number of Set Bits in Binary Representation
- 聊聊flink的ConnectionManager
- linux redhat 红帽 centos 命令格式