leetcode刷题:哈希表02 (两个数组的交集)

349. 两个数组的交集

力扣题目链接

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

349. 两个数组的交集

说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。

不难,先把一个数组去重,用set,再用一个表示所有数的标记数组,遍历第二个数组,看看每个元素是否被contains在第一个数组里,如果存在,则该数字的位置标记存在。最后再统计大小,返回结果数组。

package com.programmercarl.hashtable;
import java.util.HashSet;

/**
 * @ClassName Intersection
 * @Descriotion https://leetcode.cn/problems/intersection-of-two-arrays/
 * @Author nitaotao
 * @Date 2022/6/20 14:32
 * @Version 1.0
 * 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
 * 两个数组的交集
 **/
public class Intersection {
    public static void main(String[] args) {
        intersection(new int[]{4, 9, 7,7,6,7}, new int[]{5,0,0,6,1,6,2,2,4});
    }

    public static int[] intersection(int[] nums1, int[] nums2) {
        //数组去重
        HashSet<Integer> set1 = new HashSet<Integer>();
        for (int i : nums1) {
            set1.add(i);
        }
        //数的范围是 [0,1001]
        int[] resultTemp = new int[1001];
        for (int i : nums2) {
            if (set1.contains(i)) {
                //如果包含此数
                resultTemp[i] += 1;
            }
        }
        int count = 0;
        //因为返回结果要的是数组,所以最后得转成数组
        for (int i = 0; i < 1001; i++) {
            if (resultTemp[i] != 0) {
                count++;
            }
        }
        int[] result = new int[count];
        for (int i = 0, j = 0; i < 1001; i++) {
            if (resultTemp[i] != 0) {
                result[j] = i;
                j++;
            }
        }
        return result;
    }
}

leetcode刷题:哈希表02 (两个数组的交集)_第1张图片

发现这个题之前做过

    public int[] intersection(int[] nums1, int[] nums2) {
        TreeSet<Integer> treeSet = new TreeSet();
        for (int i = 0; i < nums1.length; i++) {
            for (int j = 0; j < nums2.length; j++) {
                if (nums1[i] == nums2[j]) {
                    treeSet.add(nums1[i]);
                }
            }
        }
        int[] intersection = new int[treeSet.size()];
        Iterator<Integer> iterator = treeSet.iterator();
        int index = 0;
        while (iterator.hasNext()) {
            intersection[index] = iterator.next();
            index++;
        }
        return intersection;
    }

leetcode刷题:哈希表02 (两个数组的交集)_第2张图片

六个月前做的,效率不如现在的,果然人还是在进步的。
之前思路是直接暴力两层遍历。如果相等,添加到set,再处理成需要返回的数组。

你可能感兴趣的:(算法,java,leetcode,散列表,算法)