两个独立阵列的Swift比较元素

时间:2017-09-05 16:23:39

标签: arrays swift algorithm

我试图在不使用高阶函数的情况下比较Swift中两个不同数组中的元素。该函数应返回两个数组中的整数数组。我认为我很接近,但我得到了一个索引输出范围错误。还想知道这个衡量时间复杂度的方法

let arrayOne = [1, 5, 12, 3, -15 , 52, 20]
let arrayTwo = [3, 1, 6, 5, 57, 13, 17, 20]

func compareElementsInArray(array1:[Int], array2: [Int]) -> [Int] {

let totalArray = array1 + array2
var sortedArray = totalArray.sorted()
var results = [Int]()

for i in totalArray {
    if sortedArray[i + 1] == sortedArray[i] {
        results.append(sortedArray[i])
    }
}

return results

}

compareElementsInArray(array1: arrayOne, array2: arrayTwo)

1 个答案:

答案 0 :(得分:1)

问题是您正在遍历end的所有元素,这意味着totalArray将到达i的最后一个索引,那么您正试图访问totalArray i+1的第_个元素,其长度与sortedArray相同,因此出错。

你需要在最后一个之前的索引处停止循环,而不是最后一个循环。

totalArray

但是,您可以使用func compareElementsInArray(array1:[Int], array2: [Int]) -> [Int] { let totalArray = array1 + array2 var sortedArray = totalArray.sorted() var results = [Int]() for i in 0..<totalArray.count-1 { if sortedArray[i + 1] == sortedArray[i] { results.append(sortedArray[i]) } } return results } print(compareElementsInArray(array1: arrayOne, array2: arrayTwo)) 来实现相同的高阶函数(您的解决方案实际上并没有使用更高阶函数)。

您只需要从数组的组合中创建一个计数集,然后使用NSCountedSetflatMap计数大于1的元素和filter结果map 1}}。

[Int]