Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. class Solution {
  2. // Dec 16th
  3. private static int[] freqs = new int[26];
  4.  
  5. public int leastInterval(char[] tasks, int n) {
  6. for (char c : tasks) {
  7. freqs[c-'A']++;
  8. }
  9. List<Character> uniqTasks = new ArrayList<>();
  10. for (int i = 0; i < 26; i++) {
  11. if (freqs[i] != 0 ) uniqTasks.add((char)(i+'A'));
  12. }
  13.  
  14. Deque<Character> stack = new ArrayDeque<>();
  15. Set<Character> set = new HashSet<>();
  16. MyComparator comp = new MyComparator();
  17.  
  18. int result = 0;
  19. int remain = tasks.length;
  20. while (remain > 0) {
  21. Collections.sort(uniqTasks, comp);
  22. int i = 0;
  23. for (; i < uniqTasks.size(); i++) {
  24. Character task = uniqTasks.get(i);
  25. if ( freqs[task-'A'] != 0 && ! set.contains(task) ) {
  26. set.add(task);
  27. stack.offerLast(task);
  28. freqs[task-'A']--;
  29. remain--;
  30. if (stack.size() > n) {
  31. Character toPop = stack.pollFirst();
  32. set.remove(toPop);
  33. }
  34. break;
  35. }
  36. }
  37.  
  38. // No task added; Have to add idle
  39. if (i == uniqTasks.size()) {
  40. set.add(' ');
  41. stack.offerLast(' ');
  42. if (stack.size() > n) {
  43. Character toPop = stack.pollFirst();
  44. set.remove(toPop);
  45. }
  46. }
  47. //System.out.println(stack.peekLast() + " " + remain);
  48. result++;
  49. }
  50. return result;
  51. }
  52. static class MyComparator implements Comparator<Character>{
  53. @Override
  54. public int compare(Character c1, Character c2) {
  55. if ( freqs[c1-'A'] == freqs[c2-'A'] ) return 0;
  56. return freqs[c1-'A'] > freqs[c2-'A'] ? -1 : 1;
  57. }
  58. }
  59. }
  60. /*
  61. ["A","A","A","B","B","B"]
  62. 2
  63. ["A","A","A","B","B","B"]
  64. 3
  65. ["A","A","A","B","B"]
  66. 4
  67. ["A","A","A","B","B","C","D"]
  68. 4
  69. ["A","A","A","B","B","C","D"]
  70. 2
  71. ["A","A","A","B","B","C","D"]
  72. 9
  73. ["A","A","A","B","B","C","D"]
  74. 0
  75. ["A","A","A"]
  76. 0
  77. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement