【发布时间】:2018-07-07 22:55:40
【问题描述】:
这是我尝试过的解决方案,但它的顺序是 O(n^2) 所以没有通过测试结果
func sortArrayByValueAndByFrequency(nums : [Int]) {
var countDict = [Int : Int]()
var count = Int()
var values = Int()
var output = [Int]()
for index in 0 ..< nums.count {
for index2 in 0 ..< nums.count{
if nums[index2] == nums[index] {
values = nums[index2]
count += 1
}
}
countDict[values] = count
count = 0
}
let sortedByKey = countDict.sorted { ($0.key < $1.key)}
let sortedByValue = sortedByKey.sorted { ($0.value < $1.value)}
for (k,v) in sortedByValue {
for _ in 1 ... v {
output.append(k)
}
}
output.forEach { (orderedNumber) in
print(orderedNumber)
}
}
输入/输出示例:
Example array = [1,1,2,3,4,5,5,6,7,7,7,8,9,9,9,20,25,21,20]
Expected output = [2,3,4,6,8,21,25,1,1,5,5,20,20,7,7,7,9,9,9]
example 2 = [1,2,3,4,4,3,3]
output = [1,2,4,4,3,3,3]
这个问题是在 HackerRank 上问我的
【问题讨论】:
-
你的标题倒退了。给定您的示例数组和示例输出,标题应说明“首先按重复次数,然后按值其次”。
-
任何有助于解决问题的方法,但我认为我首先按重复 1 的值排序,然后按值排序以获得更高的重复次数。
-
您的输出按重复次数排序。然后对于具有相同重复次数的那些,您按值排序。这与你的标题相反。如果按照标题中的说明进行排序,则第二部分将无关紧要,因为整个数组将按值排序,这将简单地将其按简单的数字顺序排列。
标签: arrays swift sorting swift4