zoukankan      html  css  js  c++  java
  • [LeetCode] 350. 两个数组的交集 II

    一开始的想法是:用一个map来存储长度较长的数组中的所有数字,再与较短的数组中的数字比较,若出现在较长数组中,则map中的数量减一,最后用原始map与比较结束后的map比较,得到重复的数字有哪些。

    答案的解法:

    用一个数组来存储比较的结果:

    class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
            // 将长度短的数组换到前面。
            if (nums1.length > nums2.length) {
                return intersect(nums2, nums1);
            }
            // 创建 HashMap 记录 nums1 中每个元素出现的次数。
            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            for (int num : nums1) {
                int count = map.getOrDefault(num, 0) + 1;
                map.put(num, count);
            }
            int[] ans = new int[nums1.length];
            int index = 0;
            // 遍历数组 nums2 中元素,在 HashMap 中个数大于 0 则记录。
            for (int num : nums2) {
                int count = map.getOrDefault(num, 0);
                if (count > 0) {
                    ans[index++] = num;
                    count--;
                    if (count > 0) {
                        map.put(num, count);
                    } else {
                        map.remove(num);
                    }
                }
            }
            // 遍历完成返回重复元素长度的结果数组。
            return Arrays.copyOfRange(ans, 0, index);
        }
    }
    
    作者:iceblood
    链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/solution/350ti-liang-ge-shu-zu-de-jiao-ji-ii-by-iceblood/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    js对象深拷贝
    数组去重
    css布局之双飞翼布局
    css布局之圣杯布局
    在浏览器中输入URL并回车后都发生了什么?
    浮动和清除浮动
    Javascript 构造函数模式、原型模式
    Javascript之对象组合继承
    js可以随意拖拽的div的实现
    博客美化 之博客的魔方效果
  • 原文地址:https://www.cnblogs.com/doyi111/p/13358966.html
Copyright © 2011-2022 走看看