Swift in LeetCodeLeetCode

350. 两个数组的交集 II

2019-07-22  本文已影响2人  1江春水

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

【示例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、基本思路:

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
}
上一篇 下一篇

猜你喜欢

热点阅读