美文网首页
leetcode 初级之数组篇 06

leetcode 初级之数组篇 06

作者: ngugg | 来源:发表于2018-09-14 21:32 被阅读2次

    两个数组的交集 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
        }
    

    相关文章

      网友评论

          本文标题:leetcode 初级之数组篇 06

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