https://leetcode.com/problems/task-scheduler/discuss/104500/Java-O(n)-time-O(1)-space-1-pass-no-sorting-solution-with-detailed-explanation
class Solution {
public int leastInterval(char[] tasks, int n) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
int maxCount = 0; //最多的频率
int maxNum = 0; //有几个相同的最多频率的数
for(char i:tasks){
map.put(i, map.getOrDefault(i,0) + 1);
if(maxCount == map.get(i)){
maxNum++;
}else if(maxCount < map.get(i)){
maxCount = map.get(i);
maxNum = 1;
}
}
int partNum = maxCount - 1;
int partLen = n-(maxNum - 1);
int emptySlots = partLen * partNum;
int leftTasks = tasks.length - maxCount * maxNum;
int idles = Math.max(0, emptySlots - leftTasks);
return idles+tasks.length;
}
}