leetcode350两个数组的交集II

leetcode 350 Intersection of Two Arrays II

Posted by BY on July 13, 2020

前言

持续更新了

正文

问题来源

本问题来自leetcode上的350题。

问题描述

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

示例 1:

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

示例 2:

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

分析:

由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储每个数字出现的次数。对于一个数字,其在交集中出现的次数等于该数字在两个数组中出现次数的最小值。
首先遍历第一个数组,并在哈希表中记录第一个数组中的每个数字以及对应出现的次数,然后遍历第二个数组,对于第二个数组中的每个数字,如果在哈希表中存在这个数字,则将该数字添加到答案,并减少哈希表中该数字出现的次数。

func intersect(nums1 []int, nums2 []int) []int {
    m := make(map[int]int)
    res := make([]int, 0)
    for _, v := range nums1 {
        m[v]++
    }
    for _, v := range nums2 {
        if vm, ok := m[v]; ok && vm != 0 {
            m[v]--
            res = append(res, v)
        }
    }
    return res
}

总结:

勤思考。

结语

不管怎么样好好加油。