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次。

相关推荐
定栓几秒前
Webpack迁到Vite第六节:构建配置详解(vite.config.js)
前端·javascript·webpack
是枚小菜鸡儿吖3 分钟前
听歌截图太普通?我把MusicCard部署到极空间,把歌曲做成随时可开的音乐海报页
服务器·人工智能·后端·ai·大模型
sqc233sqc5 分钟前
第 J8 周:ResNeXt-50 算法解析
人工智能·算法
风骏时光牛马11 分钟前
从零到精通AI全栈学习路线
前端
虎鲸不是鱼13 分钟前
【虎鲸进化论 13】CI/CD:它在服务器上铺了条流水线
服务器·人工智能·ci/cd·大模型·自进化agent
大哥您好9 小时前
QEMU 11.1.2 多架构编译指南(x86_64 / aarch64 / riscv64)
linux·服务器
Autumn_ing9 小时前
Design.md生成UI怎么验收?举例运营后台的颜色、状态和数据核对
前端·ui·ai·设计系统·paico·ai生成ui·design.md
RobinDevNotes9 小时前
一套代码发布到十几个平台:Cocos入门速览
typescript·c#·游戏开发
keyipatience9 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
hanlin0310 小时前
刷题笔记:力扣第32题-最长有效括号
笔记·算法·leetcode