当前位置:网站首页>leetcode刷题:哈希表02 (两个数组的交集)

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

2022-06-23 17:23:00 涛涛英语学不进去

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;
    }
}

在这里插入图片描述

发现这个题之前做过

    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;
    }

在这里插入图片描述

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

原网站

版权声明
本文为[涛涛英语学不进去]所创,转载请带上原文链接,感谢
https://blog.csdn.net/niTaoTaoa/article/details/125373559