首页 > 其他分享 >leetcode-621. 任务调度器

leetcode-621. 任务调度器

时间:2022-10-09 10:56:24浏览次数:85  
标签:621 tasks int bucket 次数 任务 maxTime 任务调度 leetcode

621. 任务调度器

假设有任务["A","A","A","B","B","B"],n=2,可以画图表示CPU的时间分配

  • MT表示maxTime,这个任务列表中出现次数最大的任务数量,这里就是MT=3

  • MC表示maxCount,在这个任务列表中与出现最多的任务次数相同的任务数目,包括这个出现次数最多的任务,比如这里的就是AB,MC=2

  • 要计算执行时间就是计算有内容格子的数目,计算公式为minWorkTime = (maxTime-1) * (n + 1) + maxCount

  • 考虑如下情况公式失效:得出结果偏小,我们更新计算公式为Math.max(minWorkTime, tasks.length)

    • 但是假如任务很多的时候,可能不需要考虑休息时间,公式偏小失效,格子数为数组长度

    • 假如出现次数最多的任务只有1个,可能不需要考虑休息时间,公式偏小失效,格子数为数组长度

    • 加入休息时间为0,直接按顺序依次执行即可,公式偏小失效,最终格子数就为数组长度

public int leastInterval(char[] tasks, int n) {
    public int leastInterval(char[] tasks, int n) {
        int[] bucket = new int[26]; //任务的执行,任务为26个字母
        for(int i = 0; i < tasks.length; i++){
            bucket[tasks[i] - 'A']++; //跟A做减法,找到所有字母任务执行的次数
        }
        Arrays.sort(bucket); //从小到大排序bucket,大的在最后一位
        int maxTime = bucket[25]; //需要执行次数最多的任务
        int maxCount = 1; //初始化和执行次数最多的任务执行次数一样的任务个数
        for(int j = 24; j >= 0; j--){ //从倒数第二个开始,倒序查看有无跟最多执行次数一样的
            if(bucket[j] == maxTime ){
                maxCount++; //有就++
            }else {
                //如果不和maxTime一样,直接跳出循环,提高效率
                break;
            }
        }
        int minWorkTime = (maxTime - 1) * (n + 1) + maxCount; //根据公式计算最小工作时长
        return Math.max(minWorkTime, tasks.length); //判断公式是否偏小失效
    }
}

 

标签:621,tasks,int,bucket,次数,任务,maxTime,任务调度,leetcode
From: https://www.cnblogs.com/phonk/p/16771370.html

相关文章

  • Leetcode 117 -- 树&&bfs
    题目描述填充每个节点的下一个节点题目要求我们填充每个节点的\(next\)指针,让它指向它的(同一层)右侧的节点,如果没有,指向$NULL,(初始时全部指向\(NULL\))。思路看到......
  • Leetcode 927 -- 思维
    题目描述三等分思路题目要求我们将源数组划分为三个连续的序列,即\([0,i],[i+1,j-1],[j,n-1]\),使得这三个序列的二进制所表示的数相等。首先,我们需要挖掘出一个性......
  • leetcode 22 括号生成 js 实现
    22.括号生成难度中等数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合示例1:输入:n=3输出:["((()))","(()())","(()......
  • LeetCode 字符串相乘算法题解 All In One
    LeetCode字符串相乘算法题解AllInOnejs/ts实现字符串相乘jsbignumbermultiply/js大数相乘字符串相乘原理&图解LeetCode43.MultiplyStringsLee......
  • LeetCode算法笔记 53. 最大子数组和
    给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例1:输入:nums=[-2,1,-3,4,-1,2......
  • LeetCode算法笔记 217. 存在重复元素
    给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。示例1:输入:nums=[1,2,3,1]输出:true示例2:输入:nums=......
  • leetcode 94. Binary Tree Inorder Traversal 二叉树的中序遍历(中等)
    一、题目大意给定一个二叉树的根节点root,返回它的中序遍历。示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[......
  • [Oracle] LeetCode 20 Valid Parentheses
    Givenastringscontainingjustthecharacters'(',')','{','}','['and']',determineiftheinputstringisvalid.Aninputstringisvalidif:Openbra......
  • leetcode84-柱状图中最大的矩形
    84.柱状图中最大的矩形 两个星期没写leetcode就连暴力解法都写不出了。暴力解法classSolution{public:intlargestRectangleArea(vector<int>&heights){......
  • [Oracle] LeetCode 205 Isomorphic Strings
    Giventwostringssandt,determineiftheyareisomorphic.Twostringssandtareisomorphicifthecharactersinscanbereplacedtogett.Alloccurrence......