婴幼儿网站模板,郑州企业自助建站,郑州专业网页模板制作公司,用sqlite3做网站给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行#xff0c;并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务#xff0c;或者在待命状态。
然…给定一个用字符数组表示的 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; } }