-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