leetcode 621 Task Scheduler
来源:互联网 发布:网络买彩票合法吗 编辑:程序博客网 时间:2024/06/07 01:50
题目描述
Given a char array representing tasks CPU need to do. It contains capital letters A to Z where different letters represent different tasks.Tasks could be done without original order. Each task could be done in one interval. For each interval, CPU could finish one task or just be idle.
However, there is a non-negative cooling interval n that means between two same tasks, there must be at least n intervals that CPU are doing different tasks or just be idle.
You need to return the least number of intervals the CPU will take to finish all the given tasks.
Example 1:
Input: tasks = [‘A’,’A’,’A’,’B’,’B’,’B’], n = 2
Output: 8
Explanation: A -> B -> idle -> A -> B -> idle -> A -> B.
Note:
The number of tasks is in the range [1, 10000].
The integer n is in the range [0, 100].
思路分析
本题是leetcode contest 37新鲜出炉的一道题目,客观来讲,本题不算太难,但是题解的思路还是有助于我们理解这一类题目的一些解决方式,给类似的题目提供思考方向,因此有整理的必要。
直译本题就是任务规划,题目的核心意思是,安排一堆任务,这些任务由一个task数组给出,相同任务之间,最少有n的运行时间间隔,在n的运行时间间隔内,可以执行执行别的任务或者处于就绪状态。最终的目标是安排所有的task,使总的运行时间最小。
对于两个相同的task,我们假设都为A,两者之间的最小间隔是n,这就是题目想表达的含义,我们首先考虑出现频率最高的task,我们仍假设为A,出现的频率为x,我们知道,要满足A的时间需求,我们至少应该有 x-1个n的间隔。对于频率小于x的任务,假设为B,我们按序插入任务B,可以发现,这样的插入也是满足要求的。满足A的最小安排,最终所有的任务安排都是满足要求的(先不考虑任务多得插不进去的情况)。
因为出现频率最高的元素可能不止一个,我们假设为k个,那么这种情况下最终的时间需求为:
(x-1)*n+k
若出现完全插满的情况,上式仍然成立,但显然,多余的task没有计算。这时候我们观察形成的序列,如果完全插满,这时候的时间需求显然就是整个数组的大小了。
根据上述的分析,写出的代码如下:
class Solution {public: int leastInterval(vector<char>& tasks, int n) { // frame size vector<int> mVec(26,0); for(auto &val:tasks) { mVec[val-'A']++; } sort(mVec.begin(),mVec.end()); int i = 25; while(i>=0&&mVec[25]==mVec[i])i--; return max((mVec[25]-1)*(n+1)+25-i,static_cast<int>(tasks.size())); }};
- leetcode 621 Task Scheduler
- [Leetcode 621] Task Scheduler
- [leetcode] 621 Task Scheduler
- Leetcode算法学习日志-621 Task Scheduler
- LeetCode-621:Task Scheduler (任务调度) -- medium
- LeetCode 621. Task Scheduler
- 【LeetCode】621. Task Scheduler
- [LeetCode] 621. Task Scheduler
- Leetcode 621. Task Scheduler
- [leetcode]621. Task Scheduler
- leetcode 621. Task Scheduler
- Leetcode:621. Task Scheduler
- LeetCode Task Scheduler
- [LeetCode]621. Task Scheduler
- LeetCode-Task Scheduler
- LeetCode:Task Scheduler
- leetcode练习 Task Scheduler
- leetCode-Task Scheduler
- Linux常用命令详解
- 基于Qt(Linux)的ROS开发环境配置
- 002-1-1-项目台账-已确定格式的项目台账的列名
- 剑指Offer——通过先序和中序构建二叉树
- 关于在Spring过滤器中修改request的参数值遇到的问题(三)
- leetcode 621 Task Scheduler
- 从mysql转换到oracle数据库
- NYOJ:24-素数距离问题
- sky数
- 理解RecyclerView的RecyclerView.ItemDecoration(一)
- Linux--RH254---unit 11 bash 2
- C++ builder 中的 XMLDocument 类详解(16) – 前一个节点、后一个节点和父节点
- 解决用命令行编译java文件出现的问题
- Linux学习之文件处理命令(三)链接命令