哈希表:数组合并总结

2,313 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

两个数组的交集1

题目:

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

For Example:

示例 1:

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

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]

Solution:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> intersect = new HashSet<Integer>();
        int len1 = nums1.length;
        int len2 = nums2.length;
        Set<Integer> set = new HashSet<Integer>();
        if(len1 < len2){
            for (int i = 0; i < len2; i++) {
                if (!set.contains(nums2[i])) {
                    set.add(nums2[i]);
                }
            }

            for (int j = 0; j < len1; j++) {
                if (set.contains(nums1[j])) {
                    intersect.add(nums1[j]);
                }
            }

        } else {
            for (int i = 0; i < len1; i++) {
                if (!set.contains(nums1[i])) {
                    set.add(nums1[i]);
                }
            }

            for (int j = 0; j < len2; j++) {
                if (set.contains(nums2[j])) {
                    intersect.add(nums2[j]);
                }
            }
        }

        int[] array = new int[intersect.size()];
        int i = 0;
        for(int value:intersect) {
            array[i++] = value;
        }

        return array;
    }
}

两个数组的交集2

题目:

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

For Example:

示例 1:

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

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

Solution:

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        // 先找出比较长的数组
        if (nums1.length < nums2.length){
            return intersect(nums2, nums1);
        }
        // 存放值与出现的次数
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        //遍历数组,初始化 map
        for (int i = 0; i < nums1.length; i++) {
            map.put(nums1[i], map.getOrDefault(nums1[i], 0) + 1);
        }
        int[] array = new int[nums1.length];
        int index = 0;
        for (int j = 0; j < nums2.length; j++) {
            if (map.containsKey(nums2[j])){
                array[index++] = nums2[j];

                if ((map.get(nums2[j]) - 1) <= 0){
                    map.remove(nums2[j]);
                } else {
                    map.put(nums2[j], map.get(nums2[j]) - 1);
                }
            }
        }

        int arr2[] = java.util.Arrays.copyOf(array,index);
        return arr2;
    }
}

我是杰少,如果您觉的我写的不错,那请给我 点赞+评论+收藏 后再走哦!

往期文章:

请你喝杯 ☕️ 点赞 + 关注哦~

  1. 阅读完记得给我点个赞哦,有👍 有动力
  2. 关注公众号--- HelloWorld杰少,第一时间推送新姿势

最后,创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论😄~**