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也可以看作 ...
随机推荐
- Cocoapods私有库
http://www.jianshu.com/p/d6a592d6fced 1.创建两个什么都不选的远程仓库:(私有公有都可,ReadMe\ignore都不选),一个放代码,一个放源(*.podspe ...
- Rust 基础学习
所有权: 变量具有唯一所有权.如果一个类型拥有 Copy trait,一个旧的变量在将其赋值给其他变量后仍然可用.除此之外,赋值意味着转移所有权.Rust 不允许自身或其任何部分实现了 Drop tr ...
- IANA
IANA,全称The Internet Assigned Numbers Authority,即互联网数字分配机构1. Internet已成为全球范围的网络.为保证其正常运作,全球有很多机构参与进来. ...
- 第二章 Vue快速入门-- 19 v-if和v-show的使用和特点
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- pidstat 命令(Linux 进程使用资源情况采样)
pidstat 作用 pidstat 获取服务器指定进程的使用资源信息(包括 CPU.设备IO.内存.线程.任务切换等). 执行一波 [root@wille ~]# pidstat Linux 2.6 ...
- 使用ajax上传图片,并且使用canvas实现出上传进度效果
前端代码: <%@ page contentType="text/html;charset=UTF-8" language="java" %> &l ...
- vue前端与django后端数据交互
//把数据传到路径为/airCdt/的django后端函数进行数据处理 onSubmit(){ const dict={ 'floor': this.formLabelAlign.floor, 'ro ...
- 43 java中的异常处理机制的简单原理和应用
- k8s配置文件模板
一,deployment Deployment为Pod和Replica Set下一代Replication Controller)提供声明式更新 1,配置示例 apiVersion: apps/v1 ...
- 盒子模型的overflow属性,border属性,padding与margin属性
今天要写的是CSS布局—盒子模型 首先说一下CSS的整体布局: 它包括容器(container),页眉(header),导航条(navbar),页面主要内容(main),菜单(menu),主要内容(c ...