- 只关注出现次数最多的字符,然后以此为基础, 摆出所有需要插空的空格,
然后就只剩两种情况,比如出现次数一样最多的字符有2种, 那么所有任务 - 最后的2种,然后去插空(按顺序插),看能不能把所有空格都消耗完
这是能消耗完的例子







所以总时间就是N
- 接下来是不能消耗完的例子




所以总时间就是N + 剩余的空格数
public int leastInterval(char[] tasks, int free) {int[] count = new int[256];// 出现最多次的任务,到底是出现了几次?int maxCount = 0;for (char task : tasks) {count[task]++;maxCount = Math.max(maxCount, count[task]);}// 有多少种任务,都出现最多次int maxKinds = 0;for (int i = 0; i < 256; i++) {if (count[i] == maxCount) {maxKinds++;}}// 砍掉最后一组剩余的任务数int taskExceptionFinalTeam = tasks.length - maxKinds;int spaces = (free + 1) * (maxCount - 1);int restSpaces = Math.max(0, spaces - taskExceptionFinalTeam);return tasks.length + restSpaces;}
