1 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
您的函數(shù)并不總是返回列表:
if k >= (len(l)//2):
return
中的條件if可能為真,然后返回None。例如,如果l為空(因此k為零),則此條件將為 true,并且您的代碼返回None而不是預(yù)期的[].
所以刪除那個(gè)if塊。
其次,當(dāng)l為空時(shí),您的代碼仍然會(huì)失敗,因?yàn)?的參數(shù)max()必須非空。
不要if在循環(huán)內(nèi)部放置一個(gè)確定循環(huán)何時(shí)結(jié)束的方法,而是將條件放在條件中while:
def lowest(l, k):
q = Queue()
array = l.copy()
while k < len(array):
temp = max(array)
q.enqueue(temp)
array.remove(temp)
return array
但應(yīng)該注意的是,該解決方案在空間使用方面并不比使用sorted. 如果您確實(shí)想遵循挑戰(zhàn)中的限制,那么這不應(yīng)算作解決方案。此代碼復(fù)制整個(gè)輸入數(shù)組,因此使用O(n)額外空間。
有一些方法可以只使用O(k)額外空間,即返回結(jié)果所需的空間。盡管挑戰(zhàn)的描述暗示使用隊(duì)列,但我會(huì)選擇永遠(yuǎn)不會(huì)超過(guò)k 個(gè)條目的最大堆。
添加回答
舉報(bào)