美文网首页Swift in LeetCodeLeetCode
350. 两个数组的交集 II

350. 两个数组的交集 II

作者: 1江春水 | 来源:发表于2019-07-22 20:07 被阅读2次

【题目描述】
给定两个数组,编写一个函数来计算它们的交集。

【示例1】

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

【示例2】

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]

【说明】

1、输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
2、我们可以不考虑输出结果的顺序。

【解1】
1、时间复杂度O(N^2)
2、空间复杂度O(n)
3、基本思路:

  • 遍历一个数组,把两个共同的元素添加到新建的数组中,遍历完返回数组!
func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
    var result = [Int]()
    var tmpNum1 = nums1
    for num in nums2 {
        if nums1.contains(num) {
            if let index = tmpNum1.index(of: num) {
                tmpNum1.remove(at: index)
                result.append(num)
            }
            if tmpNum1.count <= 0 {
                break
            }
        }
    }
    return result
}

【解2】
1、时间复杂度O(n)
2、空间复杂度O(n)
3、基本思路:

  • 使用map[数字为key,数字个数为value]记录数字和数字个数
  • 遍历数组2,map[num]的值大于0的就是两个数组共有的数字,然后map[num]-=1
  • 返回添加数字的数组
func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
    var result = [Int]()
    var tmp = [Int:Int]()
    for num in nums1 {
        var t = tmp[num] ?? 0
        t+=1
        tmp.updateValue(t, forKey: num)
    }
    for n in nums2 {
        let tt = tmp[n] ?? 0
        if tt > 0 {
            result.append(n)
            tmp[n]!-=1
        }
    }
    return result
}

相关文章

网友评论

    本文标题:350. 两个数组的交集 II

    本文链接:https://www.haomeiwen.com/subject/kirglctx.html