代码随想录day6-两数的交集

46 阅读1分钟

题目简介

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

解决思路

  1. 使用哈希表,自动去重而且可以知道那个元素已经出现过了。代码如下
public int[] intersection(int[] nums1, int[] nums2) {
        HashSet<Integer> set = new HashSet<Integer>();
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i = 0; i < nums1.length; i++){
            set.add(nums1[i]);
        }
        for(int i = 0; i < nums2.length; i++){
            if(set.contains(nums2[i])){
                list.add(nums2[i]);
                set.remove(nums2[i]);
            }
        }
        int ints[] = new int[list.size()];
        for(int i = 0; i < list.size(); i++){
            ints[i] = list.get(i);
        }
        return ints;
    }

时间复杂度O(n)n与nums1和nums2相关,空间复杂度O(n)和数组中元素相关 2.根据题目数据范围,使用数组ints实现哈希表的功能,记录元素出现次数。

public int[] intersection(int[] nums1, int[] nums2) {
        int[] ints = new int[1001];
        for(int i = 0;i < nums1.length; i++){
            if(ints[nums1[i]] == 0){
                ints[nums1[i]]++;
            }
        }
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0;i < nums2.length; i++){
            if(ints[nums2[i]] != 0){
                ints[nums2[i]]++;
            }   
        }
        for(int i = 0; i < ints.length; i++){
            if(ints[i] > 1){
                list.add(i);
            }
        }
        int[] tmp = new int[list.size()];
        for(int i = 0; i < list.size(); i++){
            tmp[i] = list.get(i);
        }
        return tmp;
    }

时间复杂度O(n)n与nums1和nums2有关,空间复杂度为nums1元素大小相关。