我如何才能将一系列整数(例如[4、2、3、3、2、4、1、2、4])分组为[4、4、4、2、2、2, [3,3,1],而无需使用任何排序算法。
请注意,我不需要将结果按任何排序的顺序进行,但是我确实需要建议的算法来比qsort更快地对一百万个数字进行分组。
答案 0 :(得分:2)
如果您不太在意使用多余的空间,这应该可以工作。它首先将每个数字的出现次数存储在unordered_map
中,然后创建一个包含映射中每个值的向量,并重复在原始vector
中看到的次数。有关其工作原理,请参见insert的文档。 []
的{{1}}运算符平均在unordered_map
中工作。因此,创建O(1)
需要花费unordered_map
的时间。遍历地图并再次填充返回向量需要O(N)
时间,因此,整个过程应在O(N)
中运行。请注意,这会创建两个额外的数据副本。
在最坏的情况下,O(N)
运算符会花费[]
的时间,因此要真正知道它是否比O(N)
更快,唯一的方法就是测量它。
qsort