1、题目数组
一、审题spa
二、分析code
输入为任务数组,且相同的任务只有在距离 n 以后才能,才能再作。求最少处理时间。blog
2、解答ast
① 首先统计出数组中,出现字符最多的次数 max, 出现次数最多的字符有几种 maxCount;class
② 将出现次数最多的字符做为批次的划分,共有 max - 1 批空槽等待填写任务。im
③ 每一批空槽有 n - (maxCount - 1) 个空槽位置统计
④ 除了已填写的最大批次任务还剩下的做业数 tasks.length - max * maxCountimg
⑤ 若 emptySlots > availableTasks 意味着没有足够的任务来填满空槽。则须要的处理时间为,返回总槽数 + 填写的最大任务数di
⑥ 若 emptySlots < availableTasks 意味着有足够的任务填写槽。剩下的任务能够足够分开添加在各个槽批次的末尾。则须要的处理时间为 tasks.length
public int leastInterval(char[] tasks, int n) { int[] counter = new int[26]; int max = 0; // 出现的字符最多的次数 int maxCount = 0; // 统计出现次数最多的字符有几种种类,eg 3A3B3C。 则为 2 AB for(char task: tasks) { counter[task - 'A']++; if(max == counter[task - 'A']) maxCount++; else if(max < counter[task - 'A']) { max = counter[task - 'A']; maxCount = 1; } } int partCount = max - 1; // 空槽有几批 int partLength = n - (maxCount - 1); // 每一批空槽有几个空槽位置 int emptySlot = partCount * partLength; // 总的空槽个数 int availableTasks = tasks.length - max * maxCount; // 除了 AB 还剩下的做业数 int idles = Math.max(0, emptySlot - availableTasks); // emptySlots > availableTasks 意味着没有足够的任务来填满空槽 return tasks.length + idles; }