【发布时间】:2019-06-10 09:51:05
【问题描述】:
我需要根据频率对元素数组进行排序,例如:
Input array: [1, 6, 6, 6, 6, 4, 3, 5, 5, 5, 2, 2]
Expected output: [1, 3, 4, 2, 2, 5, 5, 5, 6, 6, 6, 6]
我尝试了以下代码:
var set: NSCountedSet = [1, 6, 6, 6, 6, 4, 3, 5, 5, 5, 2, 2]
var dictionary = [Int: Int]()
set.forEach { (item) in
dictionary[item as! Int] = set.count(for: item)
}
dictionary.keys.sorted()
print(dictionary)
说明:由于1、3、4只出现一次,所以显示在开头,2出现2次,5出现3次,6出现4次。并且 [1, 3, 4] 在其中排序。
预期结果:时间复杂度应为 O(n)
【问题讨论】:
-
我认为在最坏的情况下你不能达到 O(n)。如果您的要求是对唯一项目进行排序,那已经为您提供 O(n*log n)。
-
如果频率较小,计数排序是满足o(n)的一种选择
标签: ios arrays swift sorting time-complexity