給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a - z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。
然而,兩個相同種類的任務之間必須有長度為 n 的冷卻時間,因此至少有連續 n 個單位時間內 cpu 在執行不同的任務,或者在待命狀態。
你需要計算完成所有任務所需要的最短時間。
示例 :
輸入:tasks = ["a","a","a","b","b","b"], n = 2
輸出:8
解釋:a -> b -> (待命) -> a -> b -> (待命) -> a -> b.
在本示例中,兩個相同型別任務之間必須間隔長度為 n = 2 的冷卻時間,而執行乙個任務只需要乙個單位時間,所以中間出現了(待命)狀態。
任務的總個數為 [1, 10000]。
n 的取值範圍為 [0, 100]。
思路:有題目個數可得,要在任務之間插入任務。
用填桶的方法,最終是在出現的最多的任務之間插任務或者空白冷卻時間。不管任務的個數少多少,最終是要把桶上面的max-1層給填滿。
此時,任務只需要往後加就行,其實這個時候就是相當於根本用不上冷卻時間,陣列的個數就是最終的時間。
**如下:
使用排序:
public int leastinterval(char tasks, int n)
arrays.sort(arr);
int max=arr[arr.length-1];
int maxcount=0;
for(int i=arr.length-1;i>=0;i--)
maxcount++;
}return math.max(tasks.length,maxcount+(n+1)*(max-1));
}
也可以不用排序,找出最大值即可!
public int leastinterval(char tasks, int n)
int max = 0; //找出現最多的任務 記錄個數
for (int count : counts)
int maxcount = 0; //相當於找最後一行的的元素個數
for (int count : counts)
}return math.max((n + 1) * (max - 1) + maxcount, tasks.length);
}
Leetcode 621任務排程
首先統計同型別的任務數,然後從大到小排序 因為數量多的任務才會因為重複,需要間隔期 排序不影響結果,無論是三個a和兩個b,還是兩個a和三個b結果是一樣的。想法是有多個桶 桶的個數取決於數量最多的任務數 桶的容量至少是n 1,桶內元素不重複,如果元素不能填滿,就需要填入冷卻時間。如果多餘元素數量大於等...
leetcode 621 任務排程器
給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為n的冷卻時...
LeetCode 621 任務排程器
給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為n的冷卻時...