1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
class Solution { public int leastInterval(char[] tasks, int n) { int max = 0; int maxCount = 0; int[] chs = new int[26]; for(char c:tasks){ chs[c-'A']++; if(chs[c-'A']==max){ maxCount++; } else if(chs[c-'A']>max){ maxCount = 1; max = chs[c-'A']; } } int partitionNumber = max-1; int partitionCount = n-(maxCount-1); int taskNotHighestFreq = tasks.length - max*maxCount; int idleNumber = partitionNumber*partitionCount -taskNotHighestFreq; idleNumber = Math.max(0, idleNumber); return tasks.length+idleNumber; } }
|