給你一個用字符數組 tasks 表示的 CPU 需要執行的任務列表。其中每個字母表示一種不同種類的任務。任務可以以任意順序執行,并且每個任務都可以在 1 個單位時間內執行完。在任何一個單位時間,CPU 可以完成一個任務,或者處于待命狀態。
然而,兩個 相同種類 的任務之間必須有長度為整數 n 的冷卻時間,因此至少有連續 n 個單位時間內 CPU 在執行不同的任務,或者在待命狀態。
你需要計算完成所有任務所需要的 最短時間 。
示例 1:
輸入:tasks = [“A”,“A”,“A”,“B”,“B”,“B”], n = 2
輸出:8
解釋:A -> B -> (待命) -> A -> B -> (待命) -> A -> B
在本示例中,兩個相同類型任務之間必須間隔長度為 n = 2 的冷卻時間,而執行一個任務只需要一個單位時間,所以中間出現了(待命)狀態。
public int leastInterval(char[] tasks, int n) {int[] cnt=new int[26];for(char c:tasks)cnt[c-'A']++;Arrays.sort(cnt);int maxc=cnt[25],len=1;for (int i=24;i>=0;i--)if(maxc==cnt[i])len++; else break;return Math.max(tasks.length,(maxc-1)*(n+1)+len);}