亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何減少列表遍歷器的執行時間限制

如何減少列表遍歷器的執行時間限制

慕桂英4014372 2022-08-02 10:38:45
我正在處理Code Signal上的Python問題,我試圖查看給定的列表是否在僅從中刪除一個元素時是嚴格遞增的序列。因此,我構建了一些代碼,在 for 循環中,從列表中刪除元素并檢查它是否是遞增序列,然后在該確切索引處替換該元素并重新開始。這是代碼:idef almostIncreasingSequence(sequence):    for i in range(len(sequence)):        element = sequence[i]        del sequence[i]        if all(i < j for i, j in zip(sequence, sequence[1:])):            return True        sequence.insert(i, element)    return False代碼運行良好,但它會導致執行時間錯誤。有沒有辦法改進這個現有的代碼,讓它運行得更快?
查看完整描述

1 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

瀏覽列表會更快,將每個值與前一個值進行比較,以確保它嚴格增加。對于列表中的一個數字,允許此錯誤,并跳過此數字。不幸的是,這并不是那么簡單,正如我們在下面看到的那樣:


不起作用(例如。[1,4,2,3])


def almostIncreasingSequence(sequence):

    lastValue = sequence[0]

    removed_value = False

    for i in range(1,len(sequence)):

        if sequence[i] <= lastValue:

            if removed_value:

                return False

            else:

                removed_value = True

        else:

            lastValue = sequence[i]

    return True

相反,如果我們遇到非增加,我們需要涵蓋兩種可能性:刪除當前數字(例如。[1,2,1,3])或刪除前一個(例如。[1,2,8,4])。我們還有一些邊緣情況用于刪除列表中的第一個或最后一個數字。


最終(不那么漂亮)的解決方案


def almostIncreasingSequence(sequence):

    lastValue = sequence[0]

    skipped_value = False

    for i in range(1,len(sequence)):

        if sequence[i] <= lastValue:

            if i+1 == len(sequence):

                return not skipped_value # last number is not decreasing, skip if we can

            if skipped_value: 

                # if we've already skipped a number - won't work

                return False

            elif sequence[i+1] > sequence[i-1]:

                # skipping the current number will fix it

                skipped_value = True

                lastValue = sequence[i-1]

            else:

                # try and skip the previous number

                skipped_value = True

                if i == 1 or sequence[i] > sequence[i-2]:

                    # can skip the previous number and it'll work

                    lastValue = sequence[i]

                else:

                    # we have no chance

                    return False  

        else:

            lastValue = sequence[i]

    return True


查看完整回答
反對 回復 2022-08-02
  • 1 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號