1. 程式人生 > 其它 >手撕程式碼–任務排程器(Leecode 621)

手撕程式碼–任務排程器(Leecode 621)

手撕程式碼–任務排程器(Leecode 621):
給你一個用字元陣列 tasks 表示的 CPU 需要執行的任務列表。其中每個字母表示一種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。在任何一個單位時間,CPU 可以完成一個任務,或者處於待命狀態。

然而,兩個 相同種類 的任務之間必須有長度為整數 n 的冷卻時間,因此至少有連續 n 個單位時間內 CPU 在執行不同的任務,或者在待命狀態。

你需要計算完成所有任務所需要的 最短時間 。

預處理,將每一種的數量放在數組裡 a[arr[i]-'A']  然後Arrays.sort(a)

可以先判斷

情況一:

  冷卻時間n是否大於需要執行的種類 ,如果type < n ,則 必然會執行種多最多個數的n倍,即count = a[a.length-1]*n+1

情況二:

  如果n小於執行的種類,則判斷if(a[a.length-1-n] !=0)這是一輪冷卻完成,則Arrays.sort(a),count  =count + n;然後繼續判斷直到if(a[a.length-1-n] ==0),回到了第一種情況