题目描述

给定一个char数组,代表CPU需要做的任务,包含A-Z,不用考虑顺序,每个任务能在1个单位完成。但是有规定一个非负整数n代表两个相同任务之间需要至少n个时间单位。球最少数量的时间单位完成所有任务。

思路

先要找到最大的任务个数x,若总任务类数>=n,则时间至少为(x-1)*(n+1)+最大值类数;但是对于特殊情况:4A3B3C3D,n=2,则使用原来的思路(先放最多类的,再按照类别从前往后填空) 不能获得最小值。所以没有做出来。

Solution

总结了一下,LeetCode上的达人们的思路主要有这样几种:

  1. 先统计词频,再排序,从后往前找到第一个不是最大词频的下标i,结果是tasks.length或(c[25] - 1) * (n + 1) + 25 – i中大的那一个,25-i就是最大词频的任务类,这个和我的思路是一样的。证明:最大词频是k,则创建k个块,每一块开头是最大词频的任务构成的(输入AACCCDDEEE,则开头是CE),词频由大到小插入每一块。97.69%,10ms。
  2. 贪心,利用优先队列排序:队列中保存<类型,个数>的map,并且按照个数由大到小排序。按照词频由大到小取出n+1个或者队列中全部(若没有取出全部,则总长度要加上空闲个数),再把词频-1之后不为0的放回队列中。直到队列空了为止。——其实也和前面相同,总是选择词频最大的填入每一块。
  3. 使用操作系统的思想,在时间为time的时候,把time-1-n冻结的任务放回等待队列waitingQueue,在一个循环结束的时候,如果还有这一类task待完成,放到tasksTable。具体做法:先用HashMap统计词频,再用优先队列waitingQueue排序,声明一个冷却HashMap表coolDownTable,当队列不空或者冷却表不空的时候,找到冷却表time-n-1对应的任务char,拿出放到等待队列中,如果等待队列不空{拿出任务,剩余任务个数-1并放到tasksTable,如果剩余任务个数不为0放到coolDownTable.put(time, task); } time++。返回time
  4. 类似上面,模拟的思想:对于m个任务,先是每类任务的冷却时间-1,然后找到词频最大的任务及其下标,如果它的词频>-1,则取这个任务(词频-1,处理++,冷却时间+n);否则(所有任务词频都为-1),空闲+1.返回处理+空闲时间

代码

只是实现了第一个solution的代码:

    public int leastInterval(char[] tasks, int n) {
int[] freq=new int[26];
int maxFreq=0,maxFreqCount=0;
for(int i=0;i<tasks.length;i++){
freq[tasks[i]-'A']++;
}
for(int i=0;i<26;i++){
if(freq[i]>maxFreq){
maxFreq=freq[i];
maxFreqCount=1;
}else if(freq[i]==maxFreq){
maxFreqCount++;
}
}
return Math.max(tasks.length,(maxFreq-1)*(n+1)+maxFreqCount);
}

[LeetCode]621. Task Scheduler 任务安排 题解的更多相关文章

  1. LeetCode 621. Task Scheduler

    原题链接在这里:https://leetcode.com/problems/task-scheduler/description/ 题目: Given a char array representin ...

  2. [leetcode]621. Task Scheduler任务调度

    Given a char array representing tasks CPU need to do. It contains capital letters A to Z where diffe ...

  3. [LeetCode] 621. Task Scheduler 任务调度

    Given a char array representing tasks CPU need to do. It contains capital letters A to Z where diffe ...

  4. [leetcode] 621. Task Scheduler(medium)

    原题 思路: 按频率最大的字母来分块,频率最大的字母个数-1为分成的块数,每一块个数为n+1 比如AAABBCE,n=2, 则分为A-A- +A AAABBBCCEE,n=2,则分为AB-AB- +A ...

  5. 【LeetCode】621. Task Scheduler 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 公式法 日期 题目地址:https://leetco ...

  6. 621. Task Scheduler

    https://www.cnblogs.com/grandyang/p/7098764.html 将个数出现最多的那个字符作为分隔的标准,一定是最小的.所以这个时候只需要计算还需要添加多少个idel就 ...

  7. 621. Task Scheduler CPU任务间隔分配器

    [抄题]: Given a char array representing tasks CPU need to do. It contains capital letters A to Z where ...

  8. Windows Task Scheduler Fails With Error Code 2147943785

    Problem: Windows Task Scheduler Fails With Error Code 2147943785 Solution: This is usually due to a ...

  9. 在Windows Server 2012的Task Scheduler里面配置自动发送邮件

    最近在一台server上配置了每个周末备份数据库的定时任务,想顺手配置发送备份完成的邮件提醒我去Double Check一下备份结果. 悲剧地发现Send an email功能被新版的server给禁 ...

随机推荐

  1. C#序号

    OnRowCreated="gridViewCorrection_RowCreated" <asp:BoundField HeaderText="序号" ...

  2. 学习java 7.17

    学习内容: 计算机网络 网络编程 网络编程三要素 IP地址 端口 协议 两类IP地址 IP常用命令: ipconfig 查看本机IP地址 ping IP地址 检查网络是否连通 特殊IP地址: 127. ...

  3. SELECT的语法

    我们先回顾下正则表达式.下图: 描述像xy, xxy (B上转一圈), xyy, xxyy这样的字符串.然后可以进行字符串匹配.设计芯片都用Verilog语言而不是画门电路了.像x+y+这样的叫做re ...

  4. HDFS【Namenode、SecondaryNamenode、Datanode】

    目录 一. NameNode和SecondaryNameNode 1.NN和2NN 工作机制 2. NN和2NN中的fsimage.edits分析 3.checkpoint设置 4.namenode故 ...

  5. 我在项目中是这样配置Vue的

    启用压缩,让页面加载更快 在我们开发的时候,为了方便调试,我们需要使用源码进行调试,但在生产环境,我们追求的更多的是加载更快,体验更好,这时候我们会将代码中的空格注释去掉,对代码进行混淆压缩,只为了让 ...

  6. 容器的分类与各种测试(二)——vector部分用法

    向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. 与string相同, vector 同属于STL(Standard Template Library, 标准 ...

  7. ComponentScan注解的使用

    在项目初始化时,会将加@component,@service...相关注解的类添加到spring容器中. 但是项目需要,项目初始化时自动过滤某包下面的类,不将其添加到容器中. 有两种实现方案, 1.如 ...

  8. NSURLConnection和Runloop

    - 1.1 涉及知识点(1)两种为NSURLConnection设置代理方式的区别 //第一种设置方式: //通过该方法设置代理,会自动的发送请求 // [[NSURLConnection alloc ...

  9. python pandas 中文件的读写——read_csv()读取文件

    read_csv()读取文件1.python读取文件的几种方式read_csv 从文件,url,文件型对象中加载带分隔符的数据.默认分隔符为逗号read_table 从文件,url,文件型对象中加载带 ...

  10. bootstrapTable频繁向后台接口发请求

    当bootstrapTable出现这样的问题,是因为查询到的数据行数为空,而后台返回的总行数又不为0时,就会疯狂地往接口发请求