美文网首页
Get Same Elements of Two Arrays

Get Same Elements of Two Arrays

作者: su3 | 来源:发表于2017-04-19 20:47 被阅读0次

    问题

    找出两个数组的共同元素。

    解决

    方案一

    最开始想到的办法是外循环+内循环遍历,算法复杂度是 O(N2)。如果用个键值对象来保存第一个数组,另一个数组遍历一遍就得到结果了。算法复杂度是O(2N) = O(N)。

    let array1 = [1, 3, 4, 5, 6, 8, 9, 10]
    let array2 = [2, 3, 6, 8, 11, 14, 19]
    
    var map = [Int: Bool]()
    
    for item in array1 {
        map[item] = true
    }
    
    for item in array2 {
        if let b = map[item], b {
            print("\(item)")
        }
    }
    

    输出

    3
    6
    8
    

    方案二

    在 Cocoa 的环境下,可以把数组放到一个 NSSet 中,然后用 .contains() 来判断是否包含某对象。因为 NSSet 的内部实现是一个无序 Hash 表,每一个查询的时间复杂度是 O(1),遍历一遍查询的时间复杂度是 O(N)。

    let set = NSSet(array: array1)
    
    for item in array2 where set.contains(item){
        print(item)
    }

    相关文章

      网友评论

          本文标题:Get Same Elements of Two Arrays

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