解题报告 - LeetCode 两个数组的交集II
解题报告 - Copy
LeetCode 两个数组的交集II
@TOC
题目描述
给你两个整数数组
nums1
和nums2
,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
两个数组的交集II
示例:
1输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2]
提示:
11 <= nums1.length, nums2.length <= 1000
20 <= nums1[i], nums2[i] <= 1000
3
一、解题关键词
1返回数组 出现次数 考虑取比较小的数值
二、解题报告
1.思路分析
两个数组肯定需要遍历两次,
注意控制遍历顺序,比较稍微短些到数组(需要取交集)
记录当前数字 +出现次数
两次循环 取交集
2.时间复杂度
3.代码示例
1class Solution {
2 //二分思想
3 public int[] intersect(int[] nums1, int[] nums2) {
4 int len1 = nums1.length;
5 int len2 = nums2.length;
6
7 if (len1> len2){
8 return intersect(nums2,nums1);
9 }
10 Map<Integer,Integer> map = new HashMap<Integer,Integer>();
11
12 for (int num:nums1){
13 int count = map.getOrDefault(num,0) + 1;
14 map.put(num,count);
15 }
16 int [] resNum = new int[len1];
17 int index = 0;
18
19 for (int num : nums2){
20 int count = map.getOrDefault(num,0);
21 if (count > 0){
22 resNum[index++] = num;
23 count --;
24 if (count > 0){
25 map.put(num,count);
26 }else{
27 map.remove(num);
28 }
29 }
30 }
31 return Arrays.copyOfRange(resNum, 0,index);
32 }
33}
4.知识点
1map这个数据结构遍历方式有四种
21、keyset
32、entrySet(推荐)
43、iterator
54、map.values(