LeetCode 初级 - 两个数组的交集 II

两个数组的交集 II

给定两个数组,写一个方法来计算它们的交集。

例如:

给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].

注意:

  • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  • 我们可以不考虑输出结果的顺序。

分析

和前面 存在重复 一题有些类似,依旧要记录数字及其对应的出现次数,不过这一题我们需要对这两个数组都遍历一遍,先在容器记录nums1中出现的数字及其次数,再遍历查询容器中是否存在nums2中的数字,好在这一次不需要再末尾遍历输出,也就是说我们只需要一个基础的 键值对 容器即可

代码

class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
            //用来暂存结果,保存数组的长度以及各元素的值
            List<Integer> tmp = new ArrayList<>();
            HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
            //保存nums1中元素的个数        
            for(int i = 0 ;i<nums1.length;i++){
                Integer temp = map.get(nums1[i]);
                map.put(nums1[i],(temp == null? 0:temp)+1);
            }
            //遍历nums2,查询
            for(int i=0;i<nums2.length;i++){
               if(map.containsKey(nums2[i])&&map.get(nums2[i])!=0){
                   //存在该元素,且次数>0,则次数-1
                   tmp.add(nums2[i]);
                   map.put(nums2[i],map.get(nums2[i])-1);
               }
            }
            int[] result = new int[tmp.size()];
            int i = 0;
            for(Integer in : tmp){
                result[i++] = in;
            }
            return result;
        }
    }

猜你喜欢

转载自blog.csdn.net/whdalive/article/details/80356339
今日推荐