621. Task Scheduler
Вам дан 数组 задач процессора, каждая из которых представлена буквами от A до Z, и время охлаждения, n. Каждый цикл или интервал позволяет завершить одну задачу. Задачи могут быть выполнены в любом порядке, но есть ограничение: одинаковые задачи должны быть разделены не менее чем n интервалами из-за времени охлаждения. return минимальное количество интервалов, необходимое для выполнения всех задач.
示例:
Input: tasks = ["A","A","A","B","B","B"], n = 2
Output: 8
C# 解法
匹配/原始public class Solution {
public int LeastInterval(char[] tasks, int n) {
var taskCounts = new Dictionary<char, int>();
foreach (var task in tasks) {
if (taskCounts.ContainsKey(task)) {
taskCounts[task]++;
} else {
taskCounts[task] = 1;
}
}
int maxFreq = taskCounts.Values.Max();
int countMaxFreq = taskCounts.Values.Count(count => count == maxFreq);
return Math.Max(tasks.Length, (maxFreq - 1) * (n + 1) + countMaxFreq);
}
}
C++ 解法
自动草稿,提交前请检查#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int LeastInterval(char[] tasks, int n) {
var taskCounts = new unordered_map<char, int>();
foreach (var task in tasks) {
if (taskCounts.count(task)) {
taskCounts[task]++;
} else {
taskCounts[task] = 1;
}
}
int maxFreq = taskCounts.Values.Max();
int countMaxFreq = taskCounts.Values.size()(count => count == maxFreq);
return max(tasks.size(), (maxFreq - 1) * (n + 1) + countMaxFreq);
}
}
Java 解法
匹配/原始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);
}
}
JavaScript 解法
匹配/原始function leastInterval(tasks, n) {
const taskCounts = {};
for (const task of tasks) {
taskCounts[task] = (taskCounts[task] || 0) + 1;
}
const maxFreq = Math.max(...Object.values(taskCounts));
const countMaxFreq = Object.values(taskCounts).filter(count => count === maxFreq).length;
return Math.max(tasks.length, (maxFreq - 1) * (n + 1) + countMaxFreq);
}
Python 解法
匹配/原始from collections import Counter
def leastInterval(tasks, n):
task_counts = Counter(tasks)
max_freq = max(task_counts.values())
count_max_freq = list(task_counts.values()).count(max_freq)
return max(len(tasks), (max_freq - 1) * (n + 1) + count_max_freq)
Go 解法
匹配/原始package main
import (
"fmt"
"math"
)
func leastInterval(tasks []byte, n int) int {
taskCounts := make(map[byte]int)
for _, task := range tasks {
taskCounts[task]++
}
maxFreq := 0
for _, count := range taskCounts {
if count > maxFreq {
maxFreq = count
}
}
countMaxFreq := 0
for _, count := range taskCounts {
if count == maxFreq {
countMaxFreq++
}
}
return int(math.Max(float64(len(tasks)), float64((maxFreq-1)*(n+1)+countMaxFreq)))
}
Algorithm
Подсчитайте количество каждой задачи и find максимальное количество вхождений (maxFreq).
Вычислите количество интервалов, необходимых для задач с maxFreq: (maxFreq - 1) * (n + 1) + countMaxFreq, где countMaxFreq - количество задач, имеющих maxFreq.
return максимум между вычисленным значением и длиной 数组а задач, поскольку некоторые задачи могут заполнять интервал до n.
😎
Vacancies for this task
活跃职位 with overlapping task tags are 已显示.