題目描述如下:
思路:
要想完成任務的時間最短,那麼必須優先處理出現次數最多的任務(如果將次數多的任務留到最後,必然在每次任務之間留出大量的等待時間),因此我們可以以n+1個任務為一輪(保證同一種任務不出現在同一輪),每一輪按出現次數順序從大到小執行,每完成一輪就重新排序依次,直到所有任務完成;
例如:aaabbbbc n=2
首先統計任務次數,然後排序得到 4 3 1
初始time=0
每一輪任務個數為3
第一輪:從次數為4的任務開始,執行一次++time ,然後3執行依次,++time, 然後1執行依次,++time;
完成後再排序有 3 2
第二輪:次數為3的任務執行一次,++time, 次數為2的任務執行一次,++time,本輪找不到剩下可執行的任務,此時需等待乙個單位時間,++time
完成後再排序有 2 1
第三輪:*依次類推。。。++time ,++time,++time(等待)
完成後再排序有 1
第四輪:++time (所有任務完成,不需要另外等待兩個單位時間)
最後time=10
以上思路轉換為**如下:
方法一:
class
solution
++time;
++i;
} i=0;
sort
(count.
begin()
,count.
end())
;}return time;}}
;
class
solution
++i;
++time;
if(pr.
empty()
&&temp.
size()
==0)break;}
for(
auto c:temp)
pr.push
(c);
}return time;}}
;
方法三:仔細分析整個過程發現,完成任務的時間取決與出現次數最多的那個任務
例如:aaabbc n=2
a出現次數最多,我可以直接安排好a為 axxaxxa, 中間的x可以表示執行其他任務或者等待,直接計算完成任務時間為(3-1)*(2+1)+1
在例如aaabbbcc n=2
這時候a和b出現次數都是最大,安排為axxaxxab,完成任務時間為(3-1)(2+1)+2
那麼我們可以總結出乙個公式:time=(maxcnt-1)(n+1)+cnt,其中maxcnt表示任務出現最多的次數,n表示冷卻時間,cnt表示出現了maxcnt次的任務有多少個
最後有特例,比如當n=0時按公式計算結果小於tasks陣列長度,這時候直接取陣列長度即可
**如下:
class
solution
};
leetcode 任務排程器
給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為 n 的冷...
leetcode 任務排程器 python3
給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為 n 的冷...
任務排程器
leetcode621 解題思路一 排序 規定n 1個任務為一輪,保證同一輪中乙個任務最多只能被安排一次。在每一輪中,將當前的任務按照它們剩餘的次數降序排序,並選擇剩餘次數最多的n 1個任務依次執行。如果任務的中種類t n 1,則只能選擇全部的t種任務,其餘時間空閒。也就是利用貪心,因為冷卻時間的存...