Python程式:查詢完成任務所需的最小時間(相同型別任務之間有k個時間間隔)


假設我們有一個名為tasks的整數列表,其中每個專案代表不同的任務型別,我們還有一個非負整數k。每個任務需要一個單位時間來完成,並且必須按正確的順序完成任務,但我們必須在執行兩個相同型別任務之間留出k個單位時間。在任何時候,我們可以執行任務或等待。我們必須找到完成所有任務所需的時間量。

因此,如果輸入類似於tasks = [0, 1, 1, 2] k = 2,則輸出將為6,因為前兩個任務是不同型別的,因此可以無需任何間隔地執行它們,現在在時間2,下一個任務是相同型別的任務,我們必須等待2個時間槽,然後執行任務,最後是其他型別的任務,型別2。所以執行此任務。所以它就像[0, 1, 等待, 等待, 1, 2]。由此我們可以確定,我們需要6個時間槽。

為了解決這個問題,我們將遵循以下步驟:

  • tick := 0
  • slot := 新建一個對映
  • 對於tasks中的每個t,執行:
    • 如果t在slot中,則tf := slot[t]
    • 如果tf不為空並且tf - tick > 0,則
      • tick := tick + tf - tick
    • tick := tick + 1
    • slot[t] := tick + k
  • 返回tick

示例

讓我們來看下面的實現,以便更好地理解:

def solve(tasks, k):
   tick = 0
   slot = {}
   for t in tasks:
      tf = slot.get(t)
      if tf is not None and tf - tick > 0:
         tick += tf - tick
      tick += 1
      slot[t] = tick + k

   return tick

tasks = [0, 1, 1, 2]
k = 2
print(solve(tasks, k))

輸入

[0, 1, 1, 2]

輸出

6

更新於:2021年10月14日

345 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.