我為任務撰寫代碼,但收到錯誤:測驗系統超出時間限制。我需要獲得建議,如何才能更快、更準確地撰寫此代碼
代碼:
# input
n = int(input())
seq = input()
pairs = []
seq = list(seq)
# find pairs
counted = []
for i, item in enumerate(seq):
for j, num in enumerate(seq):
if (i != j) and (item == num):
if (i not in counted) and (j not in counted):
pairs.append((item, num))
counted.append(i)
counted.append(j)
# remove pairs from seq
for pair in pairs:
seq.remove(pair[0])
seq.remove(pair[1])
# create a palindrome
start = []
end = []
pairs = sorted(pairs)
pairs = list(reversed(pairs))
for item in pairs:
start.append(item[0])
end.append(item[1])
end = list(reversed(end))
if len(seq) != 0:
seq = [int(item) for item in seq]
max_el = list(sorted(seq))[-1]
start.append(max_el)
final_s = start end
# output
output = ''.join([str(item) for item in final_s])
print(output)
uj5u.com熱心網友回復:
這是一個有趣的問題,并不完全是微不足道的。首先,我認為輸入只能有一位數的奇數,否則不能形成回文。例如,11333 是有效輸入,但 113334 不是(3 和 4 都有奇數)。還應該注意的是,我們不能只在輸出中間轉儲奇數位。例如,我們可能想做 1335551 -> 3155513,但正確答案(最大回文數)是 5315135。
鑒于這些限制,這是我的解決方案嘗試。它用于collections.Counter計算數字對,然后按降序排序并鏡像以創建輸出。可能的奇數位是通過將其視為單個數字(進入輸出的中間)加上一堆配對數字來處理的。
我測驗了它的輸入大小為 10^5 位,它似乎根本不需要太多時間。
from collections import Counter
def biggest_pal(n):
c = Counter(str(n))
s = ''
evens = {k: v for k, v in c.items() if not v % 2}
odds = {k: v for k, v in c.items() if v % 2}
vodd = ''
if len(odds) > 1:
raise ValueError('Invalid input')
elif odds:
vodd, nodd = odds.popitem()
if nodd > 1:
evens[vodd] = nodd - 1
for k, v in sorted(evens.items(), key=lambda p: -int(p[0])):
s = k * int(v/2)
return s vodd s[::-1]
一些測驗輸入:
biggest_pal(112) # 121
biggest_pal(1122) # 2112
biggest_pal(1234123) # 3214123
biggest_pal(1331555) # 5315135
biggest_pal(112212) # ValueError: invalid input
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/459274.html
上一篇:在Kotlin應用程式中將資料計算與資料格式化分開是否有性能優勢?
下一篇:大輸入值的運行時間很慢
