第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用隊(duì)列的最低 k 個(gè)元素。實(shí)施未通過(guò)測(cè)試

使用隊(duì)列的最低 k 個(gè)元素。實(shí)施未通過(guò)測(cè)試

三國(guó)紛爭(zhēng) 2023-12-09 16:57:47
我需要 python udemy 練習(xí)方面的幫助。這是練習(xí):編寫(xiě)一個(gè)函數(shù),給定一個(gè)整數(shù)列表,將給出該列表中包含的 k 個(gè)最小整數(shù)。該算法不得更改原始數(shù)組。使函數(shù)盡可能節(jié)省空間,因此不允許調(diào)用 sort 或排序。將其推廣到 k 個(gè)最小整數(shù),假設(shè) k << n,其中 n 是列表中的元素?cái)?shù)量 提示:使用隊(duì)列。例如,lower([1,2,3,-1,-2,-3],2) 返回 [-3,-2]。我嘗試了這段代碼,它在 Pycharm 上工作,但在 udemy 上不起作用,它一直給我:“NoneType”對(duì)象沒(méi)有屬性“sort”。class Node:    def __init__(self, data=None, next_node=None):        self.data = data        self.next = next_node    def __str__(self):        return str(self.data)class Queue:    def __init__(self):        self.length = 0        self.head = None        self.last = None    def enqueue(self, data):        node = Node(data)        if self.length == 0:            self.head = node            self.last = node            self.length = 1            return        last = self.last        last.next = node        self.last = node        self.length += 1    def dequeue(self):        if self.length == 0:            return None        data = self.head.data        self.head = self.head.next        self.length -= 1        if self.length == 0:            self.last = None        return datadef lowest(l, k):    if k >= (len(l)//2):        return    q = Queue()    array = l.copy()    while True:        temp = max(array)        q.enqueue(temp)        array.remove(temp)        if len(array) == k:            return arrayl = [1, 2, 3, -1, -2, -3]print(lowest(l, 2))l = [32,21,45,74,24,65,34,54,78,98,77,89,84]print(lowest(l,9))
查看完整描述

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è)條目的最大堆。


查看完整回答
反對(duì) 回復(fù) 2023-12-09
  • 1 回答
  • 0 關(guān)注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)