欢迎光临散文网 会员登陆 & 注册

解题报告 - LeetCode 两个数组的交集II

2022-09-28 07:35 作者:大涛先生_  | 我要投稿

解题报告    - Copy

LeetCode 两个数组的交集II

@TOC

题目描述

 给你两个整数数组 nums1nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

两个数组的交集II
示例:

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

提示:

1<= nums1.lengthnums2.length <= 1000
20 <= nums1[i], nums2[i] <= 1000
3

一、解题关键词

1返回数组 出现次数 考虑取比较小的数值

二、解题报告

1.思路分析

  1. 两个数组肯定需要遍历两次,

  2. 注意控制遍历顺序,比较稍微短些到数组(需要取交集)

  3. 记录当前数字 +出现次数

  4. 两次循环 取交集

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
54map.values(


解题报告 - LeetCode 两个数组的交集II的评论 (共 条)

分享到微博请遵守国家法律