用JavaScript刷leetcode第621题-任务调度器

191 阅读1分钟

一、前言

矩阵解法,关注两种情况

  1. 冷却时间可以填满,任务执行时间 = 任务总数量
  2. 冷却时间不可以填满,任务执行时间 = (最多任务数 - 1) × (冷却时间 + 1) + 几种任务出现的次数为最多任务数,等号右边的解释: (第一名得分数 - 1) × (冷却时间 + 1) + 第一名并列数

二、 题目描述

image.png

欲知更加详细的题目描述,请看 官方leetcode题目地址

三、代码

/**
 * @param {character[]} tasks
 * @param {number} n
 * @return {number}
 */
 var leastInterval = function(tasks, n) {
  // 下标0-25 分别对应 A-Z
  const arr = new Array(26).fill(0)
  // 遍历tasks,统计每种任务出现的次数
  for(let i = 0; i < tasks.length; ++i) {
    arr[tasks[i].charCodeAt() - 'A'.charCodeAt()]++
  }

  // 统计 出现次数最多的任务  的  次数 (第一名)
  const maxTaskCount = Math.max.apply(null, arr)

  // 统计 几种 出现次数最多 的 任务 (有几个第一名)
  const maxTaskCountType = arr.filter(item => item === maxTaskCount).length

  // 冷却被填满,则返回任务总数,未被填满,则返回(maxTaskCount - 1) * (n + 1) + maxTaskCountType
  return Math.max(tasks.length, (maxTaskCount - 1) * (n + 1) + maxTaskCountType)

};