Advertisement
ogv

Untitled

ogv
Sep 5th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. class Solution {
  2. private final int MAX_TASKS = 26;
  3.  
  4. public int leastInterval(char[] tasks, int n) {
  5. int[] minStart = new int[MAX_TASKS];
  6. int[] counts = new int[MAX_TASKS];
  7.  
  8. for (int i = 0; i < tasks.length; i++) {
  9. int task = tasks[i] - 'A';
  10. counts[task] = counts[task] + 1;
  11. }
  12.  
  13. return go(0, minStart, counts, n, Integer.MAX_VALUE);
  14. }
  15.  
  16. private int go(int position, int[] minStart, int[] counts, int idle, int minSoFar) {
  17. boolean noMoreTasks = true;
  18.  
  19. for (int i = 0; i < MAX_TASKS; i++) {
  20. if (counts[i] > 0) {
  21. noMoreTasks = false;
  22.  
  23. int next = Math.max(minStart[i], position);
  24. if (next >= minSoFar) {
  25. continue;
  26. }
  27.  
  28. counts[i] = counts[i] - 1;
  29. minStart[i] = next + idle + 1;
  30.  
  31. int newMin = go(next, minStart, counts, idle, minSoFar);
  32.  
  33. counts[i] = counts[i] + 1;
  34. minStart[i] = next;
  35.  
  36. if (newMin < minSoFar) {
  37. minSoFar = newMin;
  38. }
  39. }
  40. }
  41.  
  42. if (noMoreTasks) {
  43. minSoFar = position + 1;
  44. }
  45.  
  46. return minSoFar;
  47. }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement