Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- private final int MAX_TASKS = 26;
- public int leastInterval(char[] tasks, int n) {
- int[] minStart = new int[MAX_TASKS];
- int[] counts = new int[MAX_TASKS];
- for (int i = 0; i < tasks.length; i++) {
- int task = tasks[i] - 'A';
- counts[task] = counts[task] + 1;
- }
- return go(0, minStart, counts, n, Integer.MAX_VALUE);
- }
- private int go(int position, int[] minStart, int[] counts, int idle, int minSoFar) {
- boolean noMoreTasks = true;
- for (int i = 0; i < MAX_TASKS; i++) {
- if (counts[i] > 0) {
- noMoreTasks = false;
- int next = Math.max(minStart[i], position);
- if (next >= minSoFar) {
- continue;
- }
- counts[i] = counts[i] - 1;
- minStart[i] = next + idle + 1;
- int newMin = go(next, minStart, counts, idle, minSoFar);
- counts[i] = counts[i] + 1;
- minStart[i] = next;
- if (newMin < minSoFar) {
- minSoFar = newMin;
- }
- }
- }
- if (noMoreTasks) {
- minSoFar = position + 1;
- }
- return minSoFar;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement