算法题
哈希表(hash map)
两个数组的交集

两个数组的交集

题目

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

示例 1:

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

示例 2:

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

思路

这道题用暴力的解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。

解法

暴力解法带去重:

func intersection(nums1 []int, nums2 []int) []int {
    res := make([]int, 0)
    for _, v1 := range nums1 {
        for _, v2 := range nums2 {
            if v1 == v2 {
                res = append(res, v1)
                break
            }
        }
    }
    return removeDuplicate(res)
}
 
func removeDuplicate(nums []int) []int {
    res := make([]int, 0)
    m := make(map[int]bool)
    for _, v := range nums {
        if _, ok := m[v]; !ok {
            m[v] = true
            res = append(res, v)
        }
    }
    return res
}

使用哈希法:

func intersection(nums1 []int, nums2 []int) []int {
    res := make([]int, 0)
    m := make(map[int]bool)
    for _, v := range nums1 {
        m[v] = true
    }
    for _, v := range nums2 {
        if _, ok := m[v]; ok {
            res = append(res, v)
            delete(m, v)
        }
    }
    return res
}