Get Same Elements of Two Arrays

问题

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

解决

方案一

最开始想到的办法是外循环+内循环遍历,算法复杂度是 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)