# LeetCode 621: Task Scheduler — Step-by-Step Visual Trace

**Medium** — Heap | Greedy | Hash Table | Counting

## The Problem

Given a list of tasks and a cooldown period n, find the minimum time needed to execute all tasks where identical tasks must be separated by at least n intervals.

## Approach

Use a max heap to always process the most frequent tasks first, simulating each time slot by processing up to n+1 tasks in each cycle to respect cooldown constraints. Track remaining task counts and add idle time when necessary.

**Time:** O(m * log k) · **Space:** O(k)

## Code

```python
import heapq
from collections import Counter

class Solution:
    def leastInterval(self, tasks: List[str], n: int) -> int:
        task_counts = Counter(tasks)
        max_heap = [-count for count in task_counts.values()]
        heapq.heapify(max_heap)

        cooldown = 0
        while max_heap:
            temp = []
            for _ in range(n + 1):
                if max_heap:
                    temp.append(heapq.heappop(max_heap) + 1)

            for count in temp:
                if count < 0:
                    heapq.heappush(max_heap, count)

            if max_heap:
                cooldown += n + 1
            else:
                cooldown += len(temp)

        return cooldown
```

## Watch It Run

> **[Open interactive visualization](https://tracelit.dev/app?trace=0621_task-scheduler)**

> **Try it yourself:** Open [TraceLit](https://tracelit.dev/app?trace=0621_task-scheduler) and step through every line.

---

*Built with [TraceLit](https://tracelit.dev) — the visual algorithm tracer for LeetCode practice.*
