【发布时间】:2020-02-04 20:27:39
【问题描述】:
给定一个整数,找出可以由数字组成的最大数。 输入:8754365 输出:8765543
我在 $O(n logn)$ 中告诉了解决方案。他让我进一步优化。
我们可以使用Hash Table进一步优化,$\rightarrow$ O(n)
算法: 1. 取一个大小为 10(0 到 9)的哈希表。 2. 存储从 0 到 9 的每个数字的计数。 3. 逆向(从 9 到 0)打印 Hash 表相对于数字计数的索引。
例子:
8754365 $\rightarrow$ (0 0 0 1 1 2 1 1 1 0) 的数字计数后的哈希表 以相反的顺序打印哈希表相对于它们的计数的索引 $\rightarrow$ 8765543 时间复杂度:O(n) 如果我错了,请纠正我。
【问题讨论】:
-
是的,这确实有效,因为哈希表中有恒定数量的键。不过你也可以使用数组。
-
@MillieSmith 但它是最优的吗
-
我不明白你怎么能比 O(n) 更快地做到这一点。您需要查看号码中的所有数字。这需要 n 步。