leetcode 初级之数组篇 06

2018-09-14  本文已影响2人  ngugg

两个数组的交集 II

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

示例 1:

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

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

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

方法一

执行用时28ms ,击败81%提交 ,
func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
    var result: [Int] = []

    var num:[Int: Int]? = [:]
    for item in nums1 {
        if  num?[item] != nil {
            num![item] = num![item]! + 1
        } else {
            num![item] = 1
        }
    }
    for item in nums2 {
        if  num?[item] != nil {
            result.append(item)
            num![item] = (num?[item])! - 1
            if num![item] == 0 {
                num?[item] = nil
            }
        }
    }
    return result
}

方法二

   // 执行用时24ms ,击败88%提交
    func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
        let a = nums1.sorted()
        let b = nums2.sorted()
        var result: [Int] = []
        var i = 0
        var j = 0
        while (i < a.count && j < b.count) {
            let n1 = a[i]
            let n2 = b[j]
            if (n1 == n2) {
                result.append(n1)
                i += 1
                j += 1
            } else if (n1 < n2) {
                i += 1
            } else {
                j += 1
            }
        }
        return result
    }
上一篇 下一篇

猜你喜欢

热点阅读