Сложность: medium
Вам дан массив задач процессора, каждая из которых представлена буквами от A до Z, и время охлаждения, n. Каждый цикл или интервал позволяет завершить одну задачу. Задачи могут быть выполнены в любом порядке, но есть ограничение: одинаковые задачи должны быть разделены не менее чем n интервалами из-за времени охлаждения. Верните минимальное количество интервалов, необходимое для выполнения всех задач.
Пример:
Input: tasks = ["A","A","A","B","B","B"], n = 2
Output: 8
👨💻 Алгоритм:
1⃣Подсчитайте количество каждой задачи и найдите максимальное количество вхождений (maxFreq).
2⃣Вычислите количество интервалов, необходимых для задач с maxFreq: (maxFreq - 1) * (n + 1) + countMaxFreq, где countMaxFreq - количество задач, имеющих maxFreq.
3⃣Верните максимум между вычисленным значением и длиной массива задач, поскольку некоторые задачи могут заполнять интервал до n.
😎 Решение:
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int leastInterval(char[] tasks, int n) {
Map<Character, Integer> taskCounts = new HashMap<>();
for (char task : tasks) {
taskCounts.put(task, taskCounts.getOrDefault(task, 0) + 1);
}
int maxFreq = taskCounts.values().stream().max(Integer::compare).get();
int countMaxFreq = (int) taskCounts.values().stream().filter(count -> count == maxFreq).count();
return Math.max(tasks.length, (maxFreq - 1) * (n + 1) + countMaxFreq);
}
}
Ставь 👍 и забирай 📚 Базу знаний