当前位置: 首页 > news >正文

东莞seo建站四川电子商务网站

东莞seo建站,四川电子商务网站,网站开发工作总结论文,买的网站可做360广告联盟吗任务调度器 https://leetcode.cn/problems/task-scheduler/ 描述 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间&#…

任务调度器

  • https://leetcode.cn/problems/task-scheduler/

描述

  • 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。

  • 然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。

  • 你需要计算完成所有任务所需要的最短时间。

示例 1:

输入:tasks = ["A","A","A","B","B","B"], n = 2
输出:8
解释:A -> B -> (待命) -> A -> B -> (待命) -> A -> B在本示例中,两个相同类型任务之间必须间隔长度为 n = 2 的冷却时间,而执行一个任务只需要一个单位时间,所以中间出现了(待命)状态。 

示例 2:

输入:tasks = ["A","A","A","B","B","B"], n = 0
输出:6
解释:在这种情况下,任何大小为 6 的排列都可以满足要求,因为 n = 0
["A","A","A","B","B","B"]
["A","B","A","B","A","B"]
["B","B","B","A","A","A"]
...
诸如此类

示例 3:

输入:tasks = ["A","A","A","A","A","A","B","C","D","E","F","G"], n = 2
输出:16
解释:一种可能的解决方案是:A -> B -> C -> A -> D -> E -> A -> F -> G -> A -> (待命) -> (待命) -> A -> (待命) -> (待命) -> A

提示:

  • 1 <= task.length <= 1 0 4 10^4 104
  • tasks[i] 是大写英文字母
  • n 的取值范围为 [0, 100]

算法实现

1 )方案 1

function leastInterval(tasks: string[], n: number): number {let result = '' // 最终队列执行的结果const dict = {} // 对归类进行存储tasks.forEach((item) => {dict[item] ? (dict[item] ++) : (dict[item] = 1)})while(true) {// 任务清单const keys = Object.keys(dict)// 任务处理完毕跳出if (!keys.length) {break}// 正常处理过程let tmp = [] // 用于存储 1 + n个任务单元for (let i = 0; i <= n; i++) {let max:number = 0 // 找到最大的任务let key:stringlet pos:number// 遍历任务清单keys.forEach((item, idx) => {// 当前任务数量大于maxif (dict[item] > max) {max = dict[item] // 存储更新maxkey = item // 存储更新当前任务pos = idx // 存储更新当前任务下标索引,用于后续的删除操作}})// 没有匹配到key, 直接跳出此次循环if (!key) {break}// 找到了keytmp.push(key) // 临时队列添加当前的keykeys.splice(pos, 1) // 将当前key从任务队列中删除dict[key] -- // 更新key的长度,已消费完成,删除来更新剩余个数// 当全部消费完成,移除当前的任务if (dict[key] < 1) {delete dict[key]}}result += tmp.join('').padEnd(n + 1, '-') // 如果不全,补充冷却时间}// 边界的处理, 最后不要出现冷却时间result = result.replace(/-+$/, '')return result.length
}
  • 关键需求分析:
    • 两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间
    • 因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。
    • 要求,完成所有任务的最短时间
  • 从上面的描述和示例中可见
    • 队列中有A,B,C,…, 现在开启了一个任务
    • 如果当前开启了A任务,那接下来n个的任务中不能有A了
    • 如果其他任务不够n的长度,那么要冷却等待
    • 只要现在队列中还有任务,我就要处理任务本身和n个任务冷却时间的 n+1 的任务,
    • 也就是从队列中取出这些任务来存放,求最短的存放时间
      • 如何做到最短,考虑使用最多的任务优先处理,尽量不会有剩余,交叉着来
      • 少的来进行插缝作业,这样即保证少的任务使用了
      • 又保证多的任务不会用冷却时间处理来占用更多资源
  • 这个算法,在实现上效率不高

2 )方案 2

function leastInterval(tasks: string[], n: number): number {// 初始化一个矩阵,用于存储给定任务的数量的字典const cnts = Array(26).fill(0);for(const c of tasks) {cnts[c.charCodeAt(0) - 'A'.charCodeAt(0)]++;}// 统计出任务中对多的数量let max = 0, tot = 0;for (let i = 0; i < 26; i++) {max = Math.max(max, cnts[i]);}// 更新tot变量的值,用于统计具有最多执行次数的任务数量for (let i = 0; i < 26; i++) {tot += max === cnts[i] ? 1 : 0;}// 这里是最核心的算法return Math.max(tasks.length, (n + 1) * (max - 1) + tot)
};
  • 这是官方示例,效率很高
  • 这里用到charCodeAt() 方法可返回指定位置的字符的 Unicode 编码
  • 后续有时间再研究下:https://leetcode.cn/problems/task-scheduler/solution/ren-wu-diao-du-qi-by-leetcode-solution-ur9w/ 中的方法二:构造
http://www.yayakq.cn/news/175052/

相关文章:

  • 电子商务网站建设 项目规划书php做的静态网站怎么加密
  • 建设部网站官网四库一平台番禺做网站哪家好
  • 哪些网站可以做企业推广怎样做酒店网站ppt模板
  • 企业网站建设板块网站建设的不足
  • dw手机网站怎么做网页游戏开服表37
  • 电子商务查询网站青岛哪里可以建网站
  • 深圳企业推广网站排名深圳网站关键词优化公司
  • 深圳网站建设商家找个人做网站还是找企业做网站
  • 网站制作详细报价个人网站怎么建立要多少钱
  • 济南网站建设和维护网站群发手机短信
  • admin网站管理系统怎么做wordpress解密
  • 网站管理 设置开启百度推广 帮做网站吗
  • 做兼职网站域名交易asp.net 网站
  • 织梦自动生成手机网站seo优化在线诊断
  • 州网站建设广告设计公司实践报告
  • 网站建设与管理和电子商务哪个好建设工程合同指什么
  • 如何申请域名注册昆明seo案例
  • asp 手机网站小学生做网站软件
  • 网站助手 伪静态全球虚拟主机论坛
  • 做ppt找素材的网站上海高端定制网站公司
  • 北京市住房与城乡建设网站公司网站建设和推广
  • 网站首页动图怎么做男女做羞羞的事网站
  • 大型门户网站建设一般多少钱wordpress 自定义
  • 网站开发工作室挣钱吗分销商管理系统
  • 菏泽网站建设菏泽众皓楚雄建网站
  • 为网站开发网站之家查询域名
  • 有找专业做淘宝网站的美工网站外部推广
  • 网站开发协议中的注意事项上海网站公司建设
  • 烟台网站制作软件黟县网站建设
  • 网站如何做会员登录页面一个网站的tdk是指网站的