题目:

给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。

然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。

你需要计算完成所有任务所需要的最短时间。

示例 :

输入:tasks = ["A","A","A","B","B","B"], n = 2
输出:8
解释:A -> B -> (待命) -> A -> B -> (待命) -> A -> B.
在本示例中,两个相同类型任务之间必须间隔长度为 n = 2 的冷却时间,而执行一个任务只需要一个单位时间,所以中间出现了(待命)状态。

分析:

给定一系列任务以及间隔数,求出完成任务的最短时间。

统计出同一种任务个数的最大值,实际上我们需要优先将该任务进行分配,观察示例不难发现,任务数最多的A有三个,那么可以建立一个任务表来添加任务。

A    
A    
A    

每两个相同任务间需要隔两个时间,那么每一行只要填入不同的任务即可。

A B null
A B null
A B  

按照这个例子我们可以得出一个公式,那就是q是拥有相同最大任务数的任务种类个数,n表示间隔时间,max是最大任务数,则最短时间为(max-1)*(n+1) + q,示例就是(3-1)*(2+1)+2=8。

如果示例改为AAABBBC的话,最短时间依旧是8

A B C
A B null
A B  

实际上,只要总任务数小于依据公式计算出的结果,答案都是计算出的结果,因为任务都可以分配到表中,但是当任务总数大于计算的答案时,结果就等于任务数了。

因为无论怎么样,都可以不出现待命状态,而完美的分配任务。

以AAABBBCCDD为例,以之前的想法我们建立安排表,将任务加入

A B C
A B C
A B  

此时还有两个D,则可以再增加一列,不会影响已经安排的任务,即任务之间需要间隔的冷却时间是不会被破坏的。

A B C D
A B C D
A B    

答案就是任务数。

程序:

class Solution {
public int leastInterval(char[] tasks, int n) {
int[] arr = new int[26];
for(char ch:tasks){
arr[ch-'A']++;
}
int maxNum = Arrays.stream(arr).max().getAsInt();
int q = 0;
for(int a:arr){
if(a == maxNum)
q++;
}
int res = (maxNum - 1) * (n+1) + q;
return res > tasks.length ? res : tasks.length;
}
}

LeetCode 621. 任务调度器 (Java)的更多相关文章

  1. Java实现 LeetCode 621 任务调度器(暴力大法)

    621. 任务调度器 给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时 ...

  2. [LeetCode]621. 任务调度器(贪心)

    题目 给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完.CP ...

  3. leetcode 621 任务调度器 Task Scheduler

    给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完.CPU 在 ...

  4. azkaben任务调度器

    azkaban学习笔记总结 01.工作流调度器azkaban 1. 任务调度概述 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive ...

  5. SpringBoot2 task scheduler 定时任务调度器四种方式

    github:https://github.com/chenyingjun/springboot2-task 使用@EnableScheduling方式 @Component @Configurabl ...

  6. springMVC + quartz实现定时器(任务调度器)

    首先我们要知道任务调度器(定时器)有几种,这边我会写三种 第一种是基于JDK的本身的一个定时器(优点:简单,缺点:满足不了复杂的需求) package com.timer1; import java. ...

  7. 基于Spring Task的定时任务调度器实现

    在很多时候,我们会需要执行一些定时任务 ,Spring团队提供了Spring Task模块对定时任务的调度提供了支持,基于注解式的任务使用也非常方便. 只要跟需要定时执行的方法加上类似 @Schedu ...

  8. spring任务执行器与任务调度器(TaskExecutor And TaskScheduler)

    对于多线程及周期性调度相关的操作,spring框架提供了TaskExecutor和TaskScheduler接口为异步执行和任务调度.并提供了相关实现类给开发者使用.(只记录采用注解的使用形式,对于X ...

  9. 企业级任务调度框架Quartz(6) 任务调度器(Scheduler)

    前序:      我们已经在前面的内容能里看到了,我们用 Scheduler 来管理我们的 Job:创建并关联触发器以使 Job 能被触发执行:以及如可选择 calendar 为给定的时程安排提供更多 ...

  10. 2. SOFAJRaft源码分析—JRaft的定时任务调度器是怎么做的?

    看完这个实现之后,感觉还是要多看源码,多研究.其实JRaft的定时任务调度器是基于Netty的时间轮来做的,如果没有看过Netty的源码,很可能并不知道时间轮算法,也就很难想到要去使用这么优秀的定时调 ...

随机推荐

  1. 浅谈sparse vec检索工程化实现

    前面我们通过两篇文章: BGE M3-Embedding 模型介绍 和 Sparse稀疏检索介绍与实践 介绍了sparse 稀疏检索,今天我们来看看如何建立一个工程化的系统来实现sparse vec的 ...

  2. Oracle邮件发送(内容中带有收件人独有信息)

    Oracle邮件发送(内容中带有收件人独有信息) Oracle邮件发送(内容中带有收件人独有信息) Oracle发送邮件最简单的应该就是用smtp,具体使用和参数讲解我这儿没有 简单来说,发送邮件的思 ...

  3. 力扣454(java&python)-四数相加 II(中等)

    题目: 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, k, l &l ...

  4. 力扣393(java)-UTF-8编码验证(中等)

    题目: 给定一个表示数据的整数数组 data ,返回它是否为有效的 UTF-8 编码. UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则: 对于 1 字节 的字符,字节的第一位设 ...

  5. 一种命令行解析的新思路(Go 语言描述)

    ​简介: 本文通过打破大家对命令行的固有印象,对命令行的概念解构后重新梳理,开发出一种功能强大但使用极为简单的命令行解析方法.这种方法支持任意多的子命令,支持可选和必选参数,对可选参数可提供默认值,支 ...

  6. k8s之dns问题

    问题1: 描述:pod新建好后,无法ping通域名(无论是外网域名还是内网域名),但是可以ping通IP(包含外网IP和内网IP),不包括kube-dns的IP,和pod同一网段IP可以ping通 # ...

  7. SAP Adobe Form 教程二 表

    本文将介绍一些进阶内容,前文:SAP Adobe Form 教程一 简单示例 方法和对比 使用表对象(Table Object)创建表 优点: 它简单易行. 当我们只有很少的字段单行时,我们可以使用它 ...

  8. dotnet build error CS5001: Program does not contain a static 'Main' method suitable for an entry point

    前言 Docker环境编译.Net6项目,出现诡异的CS5001 Program does not contain a static 'Main' method suitable for an ent ...

  9. 错误记录——mysql5.7连接失败,服务无法启动

    起因: 上周安装完mysql后,成功新建了数据库,一切都是正常的,于是就先搁置一旁.今天周一过来,却突然发现无法连接mysql了. 过程: 第一反应是服务没有启动,毕竟重启了电脑,说不定是服务没有自动 ...

  10. 【简说Python WEB】Jinja2模板

    目录 [简说Python WEB]Jinja2模板 目前环境的代码树 抽离出来的Html模板 渲染模板 条件语句 循环语句 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境 ...