Task Scheduler

medium array heap greedy

Problem

Given a list of task labels and a non-negative cooldown n, find the minimum number of time slots needed. Identical tasks must be at least n slots apart; idle slots are allowed.

Inputtasks = ["A","A","A","B","B","B"], n = 2
Output8
A B idle A B idle A B → 8 slots. Closed-form: max(len(tasks), (max-1)·(n+1) + (#tasks tied for max)).

from collections import Counter
def least_interval(tasks, n):
    counts = Counter(tasks)
    max_freq = max(counts.values())
    ties = sum(1 for v in counts.values() if v == max_freq)
    return max(len(tasks), (max_freq - 1) * (n + 1) + ties)
function leastInterval(tasks, n) {
  const counts = new Map();
  for (const t of tasks) counts.set(t, (counts.get(t) || 0) + 1);
  let maxFreq = 0;
  for (const v of counts.values()) maxFreq = Math.max(maxFreq, v);
  let ties = 0;
  for (const v of counts.values()) if (v === maxFreq) ties++;
  return Math.max(tasks.length, (maxFreq - 1) * (n + 1) + ties);
}
class Solution {
    public int leastInterval(char[] tasks, int n) {
        int[] counts = new int[26];
        for (char c : tasks) counts[c - 'A']++;
        int maxFreq = 0;
        for (int v : counts) maxFreq = Math.max(maxFreq, v);
        int ties = 0;
        for (int v : counts) if (v == maxFreq) ties++;
        return Math.max(tasks.length, (maxFreq - 1) * (n + 1) + ties);
    }
}
int leastInterval(vector<char>& tasks, int n) {
    int counts[26] = {};
    for (char c : tasks) counts[c - 'A']++;
    int maxFreq = *max_element(counts, counts + 26);
    int ties = 0;
    for (int v : counts) if (v == maxFreq) ties++;
    return max((int)tasks.size(), (maxFreq - 1) * (n + 1) + ties);
}
Time: O(n + 26) Space: O(26)