leetcode621. 任务调度器

给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一个限制:两个相同种类 的任务之间必须有长度为n的冷却时间。

返回完成所有任务所需要的最短时间间隔

示例 1:

**输入:**tasks = ["A","A","A","B","B","B"], n = 2

**输出:**8

解释:

在完成任务 A 之后,你必须等待两个间隔。对任务 B 来说也是一样。在第 3 个间隔,A 和 B 都不能完成,所以你需要待命。在第 4 个间隔,由于已经经过了 2 个间隔,你可以再次执行 A 任务。

示例 2:

**输入:**tasks = ["A","C","A","B","D","B"], n = 1

**输出:**6

**解释:**一种可能的序列是:A -> B -> C -> D -> A -> B。

由于冷却间隔为 1,你可以在完成另一个任务后重复执行这个任务。

示例 3:

**输入:**tasks = ["A","A","A","B","B","B"], n = 0

**输出:**6

**解释:**一种可能的序列为:A -> B -> idle -> idle -> A -> B -> idle -> idle -> A -> B。

只有两种任务类型,A 和 B,需要被 3 个间隔分割。这导致重复执行这些任务的间隔当中有两次待命状态。

提示:

  • 1 <= tasks.length <= 104
  • tasks[i] 是大写英文字母
  • 0 <= n <= 100
javascript 复制代码
/**
 * @param {character[]} tasks
 * @param {number} n
 * @return {number}
 */
// 621. 任务调度器 
// lodash.js 插件库,这个题里面的所有函数都是这个库里面的
var leastInterval = function(tasks, n) {

    const freq = _.countBy(tasks);
    // maxExec 是任务数最多的次数 maxExec

    // 方法返回一个给定对象自己的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
    const maxExec = Math.max(...Object.values(freq));
    
    // maxCount是 最多任务数量的任务种类
    let maxCount = 0;
    Object.values(freq).forEach(v => {
        if (v === maxExec) {
            maxCount++;
        }
    })
    // n是同任务的等待时间/冷却时间
    return Math.max((maxExec - 1) * (n + 1) + maxCount, tasks.length);
};

补充说明:

javascript 复制代码
const freq = _.countBy(tasks);分析这段代码

这段代码使用了Lodash库中的countBy函数,它用于对数组中的元素进行分组计数。

具体来说,_.countBy(tasks)会对tasks数组中的每个元素进行计数,并返回一个对象,其中对象的键是数组中的元素,值是该元素在数组中出现的次数。

举个例子,如果tasks数组如下:

javascript 复制代码
const tasks = ['apple', 'banana', 'apple', 'orange', 'banana', 'banana'];

那么执行_.countBy(tasks)后的结果将会是:

javascript 复制代码
{
  apple: 2,
  banana: 3,
  orange: 1
}

这个结果表示'apple'出现了2次,'banana'出现了3次,而'orange'出现了1次。

相关推荐
SHERlocked931 分钟前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
超级土豆粉4 分钟前
CSS3 的特性
前端·css·css3
星辰引路-Lefan4 分钟前
深入理解React Hooks的原理与实践
前端·javascript·react.js
怀旧,6 分钟前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
wyn2000112816 分钟前
JavaWeb的一些基础技术
前端
积极向上的向日葵19 分钟前
有效的括号题解
数据结构·算法·
vfvfb22 分钟前
bat批量去掉本文件夹中的文件扩展名
服务器·windows·批处理·删除扩展名·bat技巧
GIS小天25 分钟前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
Hygge-star30 分钟前
Flask音频处理:构建高效的Web音频应用指南
前端·flask·音视频·pygame·csdn开发云
江城开朗的豌豆41 分钟前
JavaScript篇:回调地狱退散!6年老前端教你写出优雅异步代码
前端·javascript·面试