-2
给定数字N找到可以从给定数字数字创建的最大可能数字X.找到由给定数字的数字组成的最大可能数字
实施例:N = 231,则X将是321
的限制是时间复杂度O(1) 和空间复杂度O(1)。
我认为这必须通过计数排序来完成。
给定数字N找到可以从给定数字数字创建的最大可能数字X.找到由给定数字的数字组成的最大可能数字
实施例:N = 231,则X将是321
的限制是时间复杂度O(1) 和空间复杂度O(1)。
我认为这必须通过计数排序来完成。
我能做的最好的是O(1)空间和O(log(N))时间。很确定不可能做得更好,因为在最低限度内,您必须分析输入中的每个数字,即log(N)。
简短的回答是,按降序对N的数字进行排序。
伪代码:
样品Python实现:
N = 231
slots = [0,0,0,0,0,0,0,0,0,0]
while N > 0:
slots[N%10] += 1
N = int(N/10)
result = ""
for slot_idx in range(10):
for i in range(slots[slot_idx]):
result = str(slot_idx) + result
print result
结果:
这个解决方案也是我想到的。感谢您遵守o(1)复杂性无法达成。 – raven
我没有看到算法是如何变得比O(n)的更快,因为你必须至少读取输入(长度n)。从那里,你需要一个就地排序,以避免占用超过O(1)内存。 – bbill
有十个元素的整数数组是否算作“o(1)空间复杂度”? – Kevin
感觉很像一个家庭作业... – DeadChex