Leetcode--621. 任务调度器
給定一個用字符數組表示的 CPU 需要執行的任務列表。其中包含使用大寫的 A - Z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,并且每個任務都可以在 1 個單位時間內執行完。CPU 在任何一個單位時間內都可以執行一個任務,或者在待命狀態。
然而,兩個相同種類的任務之間必須有長度為?n 的冷卻時間,因此至少有連續 n 個單位時間內 CPU 在執行不同的任務,或者在待命狀態。
你需要計算完成所有任務所需要的最短時間。
示例 1:
輸入: tasks = ["A","A","A","B","B","B"], n = 2
輸出: 8
執行順序: A -> B -> (待命) -> A -> B -> (待命) -> A -> B.
注:
任務的總個數為?[1, 10000]。
n 的取值范圍為 [0, 100]。
思路:
由于相同的任務之間必須有 n 的冷卻時間,所以我們可以想到按照任務的數量來安排它們,即一種任務的出現次數越多,我們就越早地安排。例如有 5 種任務 A, B, C, D, E,且它們分別有 6, 1, 1, 1, 1 個時,假設冷卻時間 n = 2,那么我們首先安排任務 A,隨后在 2 單位的冷卻時間里,我們安排任務 B, C,隨后繼續安排任務 A,再安排任務 D, E,以此類推。
也就是在最多的一種任務里面,穿插其他任務
提交的代碼:
class Solution {
? ? public int leastInterval(char[] tasks, int n) {
? ? ? ?int[] map = new int[26];
? ? ? ? for (char c: tasks)
? ? ? ? ? ? map[c - 'A']++;
? ? ? ? Arrays.sort(map);
? ? ? ? int time = 0;
? ? ? ? while (map[25] > 0) {
? ? ? ? ? ? int i = 0;
? ? ? ? ? ? while (i <= n) {
? ? ? ? ? ? ? ? if (map[25] == 0)
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? if (i < 26 && map[25 - i] > 0)
? ? ? ? ? ? ? ? ? ? map[25 - i]--;
? ? ? ? ? ? ? ? time++;
? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? }
? ? ? ? ? ? Arrays.sort(map);
? ? ? ? }
? ? ? ? return time;
? ? }
}
總結
以上是生活随笔為你收集整理的Leetcode--621. 任务调度器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端实战:仿写小米官网第一天
- 下一篇: tensorflow框架