swift - 从一个集合中初始化一个数组是否很复杂,如果是的话是什么?

标签 swift time-complexity complexity-theory

swift :选项 1

var dictionaryWithoutDuplicates = [Int: Int]()
for item in arrayWithDuplicates {
   if dictionaryWithoutDuplicates[item] == nil {
      dictionaryWithoutDuplicates[item] = 1
   }
}
print(dictionaryWithoutDuplicates.keys)
// [1,2,3,4]

选项 2

let arrayWithDuplicates = [1,2,3,3,2,4,1]
let arrayWithoutDuplicates = Array(Set(arrayWithDuplicates))
print(arrayWithoutDuplicates)
// [1,2,3,4]

对于第一个选项,可能有更优雅的方法来实现,但这不是我的意思,我只是想展示一个复杂度为 n 的示例。 这两个选项都返回一个没有重复的数组。由于第一个选项的复杂度为 O(n),我想知道第二个选项是否也有复杂度,如果有,它是什么?

最佳答案

你所做的几乎就是Set做。 Set<T>几乎只是一个 [T: Void] (又名 Dictionary<T, Void> )。

两个例子都有O(arrayWithDuplicates.count)时间和空间复杂度。

关于swift - 从一个集合中初始化一个数组是否很复杂,如果是的话是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693290/

相关文章:

object - 什么时候应该使用元组而不是对象,反之亦然?

ios - UITableView 忽略注册单元格

ios - 从 Firebase 检索用户经纬度后添加注释

algorithm - 在图中查找最小切割边

algorithm - Real World Haskell book - Logger monad 示例的渐近复杂性

arrays - 能否在常数时间 O(1) 内使用 n 个 Common CREW 处理器在大小为 n 的排序数组中找到元素 x?

arrays - 在 Swift 中确定多维数组的大小

java - 循环运行到 2 的 n 次方的时间复杂度是多少

algorithm - 一条直线上最近的一对点

algorithm - 排序名称和时间复杂度