我用java刷 leetcode 349. 两个数组的交集

Posted 深林无鹿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用java刷 leetcode 349. 两个数组的交集相关的知识,希望对你有一定的参考价值。

这里有leetcode题集分类整理!!!349. 两个数组的交集

我的脑溢血AC:【数组+双指针】

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int len1 = nums1.length;
        int len2 = nums2.length;
        int maxLen = len1 > len2? len1:len2;
        int minLen = len1 < len2? len1:len2;
        int[] res = new int[minLen];
        int i = 0, j = 0, t = 0;
        while (i < len1 && j < len2) {
            if (nums1[i] == nums2[j]) {
                if (t == 0) {
                    res[t ++] = nums1[i];
                }
                if (t > 0 && res[t - 1] != nums1[i]) {
                    res[t ++] = nums1[i];
                }
                i ++; j ++;
                continue;
            }
            if (nums1[i] < nums2[j]) {
                i ++ ;
                continue;
            }
            if (nums1[i] > nums2[j]) {
                j ++ ;
                continue;
            }
        }
        return Arrays.copyOfRange(res, 0, t);
    }   
}

官方题解:【集合操作】

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<Integer>();
        Set<Integer> set2 = new HashSet<Integer>();
        for (int num : nums1) {
            set1.add(num);
        }
        for (int num : nums2) {
            set2.add(num);
        }
        return getIntersection(set1, set2);
    }

    public int[] getIntersection(Set<Integer> set1, Set<Integer> set2) {
        if (set1.size() > set2.size()) {
            return getIntersection(set2, set1);
        }
        Set<Integer> intersectionSet = new HashSet<Integer>();
        for (int num : set1) {
            if (set2.contains(num)) {
                intersectionSet.add(num);
            }
        }
        int[] intersection = new int[intersectionSet.size()];
        int index = 0;
        for (int num : intersectionSet) {
            intersection[index++] = num;
        }
        return intersection;
    }
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/solution/liang-ge-shu-zu-de-jiao-ji-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

效率最高的代码:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        int[] hash = new int[1001];

        for(int num : nums1){
            hash[num] = 1;
        }

        int[] res = new int[nums1.length];
        int idx = 0;
        
        for(int num : nums2){
            if(hash[num] == 1){
                res[idx++] = num;
                hash[num]--;
            }
        }
        return Arrays.copyOf(res,idx);
    }
}

以上是关于我用java刷 leetcode 349. 两个数组的交集的主要内容,如果未能解决你的问题,请参考以下文章

我用java刷 leetcode 11. 盛最多水的容器

我用java刷 leetcode 21. 合并两个有序链表

我用java刷 leetcode 剑指 Offer 25. 合并两个排序的链表

我用java刷 leetcode 617.合并二叉树

力扣算法JS LC [349. 两个数组的交集] LC [202. 快乐数]

我用java刷 leetcode 662. 二叉树最大宽度