leetcode 621 任务调度器 Task Scheduler
给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。
然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。
你需要计算完成所有任务所需要的最短时间。
示例 1:
输入: tasks = ["A","A","A","B","B","B"], n = 2
输出: 8
执行顺序: A -> B -> (待命) -> A -> B -> (待命) -> A -> B.
注:
- 任务的总个数为 [1, 10000]。
- n 的取值范围为 [0, 100]。
思路记录:
采用贪心算法:
1 首先统计26种任务的频率,然后按照频率大小进行排序,记录最大的频率为k,共有p种任务的频率为k,可知p>=1。
2 然后以n+1个任务为一组,并且总是先排频率最大的任务,可分为两种情况:
a. 一种是频率最大的任务每一组都有,如对于
tasks = [A A A A B B B C C D] N=3
则是先排ABC_ABC_ABD_A,记作ans=(k-1)*(n+1)+p;
b. 一种是频率最大的任务在最后一组之前就已经结束,如对
tasks = [ A A B B C C D E] n=2
则是 ABCABCDE, 此时ans=tasks.size();
当算出来的ans<task.size()说明是后一种情况,因为ans的公式计算的是包含最大频率任务的所有任务的完成时间,如果计算出来的ans小于tasks的总任务数,说明并不是每一组都含有频率最高的任务
C++ code: 建立一个count数组统计频率
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
//max_count 最大频率,p 最大频率任务数目,n最小间隔时间;
vector<int>count(,);
int ans=-;
for(const char task: tasks){
int id=task-'A';
++count[id];
}
int max_count = *max_element(count.begin(),count.end());
int p=count_if(count.begin(),count.end(),[max_count](int c){return c==max_count;});
ans=(max_count-)*(n+)+p;
return tasks.size()>ans?tasks.size():ans;
}
};
公众:
int leastInterval(向量< char > &任务,int n) {
向量< int >数(0);
int ans = 1;
(const char任务:任务){
int id =任务——“A”;
+ +计数(id);
}
int max_count = * max_element (count.begin (), count.end ());
int p = count_if (count.begin (), count.end (), [max_count] (int c){返回c = = max_count;});
ans = (max_count-1) * (n + 1) + p;
返回tasks.size () > ans ? tasks.size():答;
}
};
leetcode 621 任务调度器 Task Scheduler的更多相关文章
- Java实现 LeetCode 621 任务调度器(暴力大法)
621. 任务调度器 给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时 ...
- [Swift]LeetCode621. 任务调度器 | Task Scheduler
Given a char array representing tasks CPU need to do. It contains capital letters A to Z where diffe ...
- [LeetCode]621. 任务调度器(贪心)
题目 给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完.CP ...
- 企业级任务调度框架Quartz(6) 任务调度器(Scheduler)
前序: 我们已经在前面的内容能里看到了,我们用 Scheduler 来管理我们的 Job:创建并关联触发器以使 Job 能被触发执行:以及如可选择 calendar 为给定的时程安排提供更多 ...
- 企业级任务调度框架Quartz(4) 多个job实例注册到任务调度器上
前序: 在第一个例子我看到了自定义的作业类在任务调度器上注册后,则通过任务调度器来实现启动:下面,我们将同一个作业类执行两个任务,并都将他们注册到任务调度器上! 首先一个job类指向两 ...
- SpringBoot2 task scheduler 定时任务调度器四种方式
github:https://github.com/chenyingjun/springboot2-task 使用@EnableScheduling方式 @Component @Configurabl ...
- Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析
原文地址: https://blog.csdn.net/yx0628/article/details/80873774 一个简单的Spring定时任务的 demo,全部代码见下载地址:https:// ...
- 基于Spring Task的定时任务调度器实现
在很多时候,我们会需要执行一些定时任务 ,Spring团队提供了Spring Task模块对定时任务的调度提供了支持,基于注解式的任务使用也非常方便. 只要跟需要定时执行的方法加上类似 @Schedu ...
- Spark源码剖析 - SparkContext的初始化(五)_创建任务调度器TaskScheduler
5. 创建任务调度器TaskScheduler TaskScheduler也是SparkContext的重要组成部分,负责任务的提交,并且请求集群管理器对任务调度.TaskScheduler也可以看作 ...
随机推荐
- python、mysql三-3:完整性约束
一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY ...
- QT textbroswer textedite Qlist的常用的操作函数
Textbrowser: 一.添加函数 1.insertPlainText():这个函数特别好用,括号里面的参数是QString,可以用QString(“%1%2”).arg(QString变量).a ...
- 7.Go-用户信息和系统文件目录
7.1.获取操作系统用户信息 (1)os包及子包功能 os/exec包,负责执行外部命令 os/singal对输入信息的访问 os/user通过名次或ID 查询用户账号 (2)在os/user中提供了 ...
- Tableau Sheet中的操作
如果想要给数据排名,例如给饼图中的数据排名 1 创建一个Rank 描述为INDEX()的测度 2.将RANK用Label形式显示并且编辑计算方法选择特定的属性. 属性本身也有可以快速计算的一些方式. ...
- python基础(while、运算符、编码初始)
------------恢复内容开始------------ <!doctype html> while循环 while循环 循环:不断重复着某件事就是循环 while 关键字 死循环:w ...
- arduino读取GPIO数据
一.接线 五向按键模块接线方法,直接盗图,COM接VCC或GND都可以,只不过获得的电平不同 二.初始化 GPIO接口使用前,必须初始化,设定引脚用于输入还是输出 pinMode(D7, INPUT) ...
- vue 绑定class、v-bind:style(对象语法、数组语法)
绑定 HTML Class 我们可以传给 v-bind:class 一个对象,以动态地切换 class: 内联样式在模板里 <div id="div1" :class=&qu ...
- 【封装工程】OI/ACM常用封装
前言 笔者有的时候无聊,就将一些奇怪的东西封装起来. 范围主要是在\(OI\)或者\(ACM\)中的常见数据结构等. 随着笔者的能力的提升,可能会对原来的封装程序进行修改,并且保留原来的版本. [ST ...
- 【BZOJ4552】排序(线段树,二分)
题意:给定一个n个数的排列,有m次操作:op,l,r op=0时表示将位置[L,R]升序排序 op=1时表示将位置[L,R]降序排序 最后询问第q个位置上的数字 n,m,q<=1e5 思路:Fr ...
- 51nod-1640--天气晴朗的魔法(简单最小生成树)
1640 天气晴朗的魔法 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日 ...