621. Task Scheduler

選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。

Вам дан 配列 задач процессора, каждая из которых представлена буквами от 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 表示.

すべての求人
有効な求人はまだありません。