解法
用桶的思路,按最大元素数进行分桶,每个桶的容量为n+1,这样最大元素数就能保证可以执行,要么有空闲,要么没空闲,所有的元素都能执行,这样就是任务的数量,这种就是带F的情况,会大于公式计算的。
image.png
class Solution {
public int leastInterval(char[] tasks, int n) {
// 记录不同任务出现的次数
int[] nums = new int[26];
for (char c : tasks) {
nums[c - 'A']++;
}
// 进行排序
Arrays.sort(nums);
// 计算等于最大数量的元素有几个
int cnt = 1;
int maxCount = nums[25];
for (int i = nums.length - 1; i > 0; i--) {
if (nums[i] == nums[i - 1]) {
cnt++;
} else {
break;
}
}
// 最大数目代表桶数,每桶有n+1的空间,这样最大数目的任务可以冷却
// 如果不同的任务很多,塞满(maxCount - 1) * (n + 1)后,还要放,那就是没有冷却的情况,和tasks.length一样大
// cnt代表和最大元素数相同的数目,在最后一行,数目为cnt
return Math.max(tasks.length, (maxCount - 1) * (n + 1) + cnt);
}
}
网友评论