6

Leetcode 349 两个数组的交集 ( Intersection of Two Arrays *Easy* ) 题解分析

 2 years ago
source link: https://nicksxs.me/2022/03/07/Leetcode-349-%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86-Intersection-of-Two-Arrays-Easy-%E9%A2%98%E8%A7%A3%E5%88%86%E6%9E%90/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Leetcode 349 两个数组的交集 ( Intersection of Two Arrays *Easy* ) 题解分析

发表于 2022-03-07 分类于 Javaleetcode 阅读次数: 12 阅读次数: 9 Disqus: 0 Comments

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

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

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的  

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

分析与题解

两个数组的交集,最简单就是两层循环了把两个都存在的找出来,不过还有个要去重的问题,稍微思考下可以使用集合 set 来处理,先把一个数组全丢进去,再对比另外一个,如果出现在第一个集合里就丢进一个新的集合,最后转换成数组,这次我稍微取了个巧,因为看到了提示里的条件,两个数组中的元素都是不大于 1000 的,所以就搞了个 1000 长度的数组,如果在第一个数组出现,就在对应的下标设置成 1,如果在第二个数组也出现了就加 1,

public int[] intersection(int[] nums1, int[] nums2) {
    // 大小是 1000 的数组,如果没有提示的条件就没法这么做
    // define a array which size is 1000, and can not be done like this without the condition in notice
        int[] inter = new int[1000];
        int[] outer;
        int m = 0;
        for (int j : nums1) {
            //  这里得是设置成 1,因为有可能 nums1 就出现了重复元素,如果直接++会造成结果重复
            // need to be set 1, cause element in nums1 can be duplicated
            inter[j] = 1;
        }
        for (int j : nums2) {
            if (inter[j] > 0) {
                // 这里可以直接+1,因为后面判断只需要判断大于 1
                // just plus 1, cause we can judge with condition that larger than  1
                inter[j] += 1;
            }
        }
        for (int i = 0; i < inter.length; i++) {
            // 统计下元素数量
            // count distinct elements
            if (inter[i] > 1) {
                m++;
            }
        }
        // initial a array of size m
        outer = new int[m];
        m = 0;
        for (int i = 0; i < inter.length; i++) {
            if (inter[i] > 1) {
                // add to outer
                outer[m++] = i;
            }
        }
        return outer;
    }
Buy me a coffee

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK