首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-12-21:任务调度器。 给你一个用字符数组 tasks 表示

2021-12-21:任务调度器。 给你一个用字符数组 tasks 表示

原创
作者头像
福大大架构师每日一题
发布于 2021-12-21 14:46:28
发布于 2021-12-21 14:46:28
3600
举报

2021-12-21:任务调度器。

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

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

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

力扣621。

答案2021-12-21:

目的是让空格最少。贪心。

时间复杂度:O(N)。

空间复杂度:O(1)。

代码用golang编写。代码如下:

代码语言:txt
AI代码解释
复制
package main

import "fmt"

func main() {
    tasks := []byte("AAABBB")
    n := 2
    ret := leastInterval(tasks, n)
    fmt.Println(ret)
}

// ['A', 'B', 'A']
func leastInterval(tasks []byte, free int) int {
    count := make([]int, 256)
    // 出现最多次的任务,到底是出现了几次
    maxCount := 0
    for _, task := range tasks {
        count[task]++
        maxCount = getMax(maxCount, count[task])
    }
    // 有多少种任务,都出现最多次
    maxKinds := 0
    for task := 0; task < 256; task++ {
        if count[task] == maxCount {
            maxKinds++
        }
    }
    // maxKinds : 有多少种任务,都出现最多次
    // maxCount : 最多次,是几次?
    // 砍掉最后一组剩余的任务数
    tasksExceptFinalTeam := len(tasks) - maxKinds
    spaces := (free + 1) * (maxCount - 1)
    // 到底几个空格最终会留下!
    restSpaces := getMax(0, spaces-tasksExceptFinalTeam)
    return len(tasks) + restSpaces
    // return Math.max(tasks.length, ((n + 1) * (maxCount - 1) + maxKinds));
}

func getMax(a, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
力扣621——任务调度器
给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。
健程之道
2020/02/26
6850
golang刷leetcode 任务调度器
给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。
golangLeetcode
2022/08/02
2780
golang刷leetcode 任务调度器
【Day31】力扣算法(超详细思路+注释)[1441. 用栈操作构建数组 ] [621. 任务调度器]
题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。 请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。 / 示例 1: 输入:target = [1,3], n = 3 输出:[“Push”,“Push”,“Pop”,“Push”] 解释: 读取 1 并自动推入数组 -> [1] 读取 2 并自动推入数组,然后删除它 -> [1] 读取 3 并自动推入数组 -> [1,3] / 示例 2: 输入:target = [1,2,3], n = 3 输出:[“Push”,“Push”,“Push”] / 示例 3: 输入:target = [1,2], n = 4 输出:[“Push”,“Push”] 解释:只需要读取前 2 个数字就可以停止。
.29.
2022/11/15
2720
【Day31】力扣算法(超详细思路+注释)[1441. 用栈操作构建数组 ] [621. 任务调度器]
任务调度器 (难度:中等) - Day20201205
给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。
前端小书童
2020/12/17
6940
LeetCode 621. 任务调度器(贪心)
给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。
Michael阿明
2020/07/13
1.5K0
LeetCode 621. 任务调度器(贪心)
2022-01-24:K 距离间隔重排字符串。 给你一个非空的字符
给你一个非空的字符串 s 和一个整数 k,你要将这个字符串中的字母进行重新排列,使得重排后的字符串中相同字母的位置间隔距离至少为 k。
福大大架构师每日一题
2022/01/24
2490
【面试高频题】难度 2.5/5,脑筋急转弯构造题
给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。
宫水三叶的刷题日记
2022/12/30
4410
【面试高频题】难度 2.5/5,脑筋急转弯构造题
常用算法之贪心算法
思路:求解问题时,总是选当前最好的选择,不从整体上考虑。因而选用贪心算法必须保证当前选的最好的必定是整体最好的。
爬蜥
2019/07/09
6510
621. 任务调度器
方法(贪心算法) 容易想到的一种贪心策略为:先安排出现次数最多的任务,让这个任务两次执行的时间间隔正好为n。再在这个时间间隔内填充其他的任务。
名字是乱打的
2022/01/12
4900
621. 任务调度器
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。提示:1 <= s.length <= 10的4次方,s 仅由小写英文字母组成,1 <= k <= 10的5次方。力扣395。
福大大架构师每日一题
2021/11/13
3240
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。提示:1 <= s.length <= 10的4次方,s 仅由小写英文字母组成,1 <= k <= 10的5次方。力扣395。
福大大架构师每日一题
2021/11/16
6020
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求
用javascript分类刷leetcode4.贪心(图文视频讲解)
贪心法,又称贪心算法,贪婪算法,在对问题求解时,总是做出在当前看来最好的选择,期望通过每个阶段的局部最优选择达到全局最优,但结果不一定最优
hellocoder2028
2022/12/15
3550
2021-12-30:分裂问题。 一个数n,可以分裂成一个数组[n/2,
2021-12-30:分裂问题。 一个数n,可以分裂成一个数组n/2, n%2, n/2, 这个数组中哪个数不是1或者0,就继续分裂下去。 比如 n = 5,一开始分裂成2, 1, 2, 2, 1, 2这个数组中不是1或者0的数,会继续分裂下去,比如两个2就继续分裂, 2, 1, 2 -> 1, 0, 1, 1, 1, 0, 1, 那么我们说,5最后分裂成1, 0, 1, 1, 1, 0, 1。 每一个数都可以这么分裂,在最终分裂的数组中,假设下标从1开始, 给定三个数n、l、r,返回n的最终分裂数组里l,
福大大架构师每日一题
2021/12/30
2090
2021-10-12:验证回文串。给定一个字符串,验证它是否
2021-10-12:验证回文串。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串 。输入: "A man, a plan, a canal: Panama"。输出: true。解释:"amanaplanacanalpanama" 是回文串。力扣125。
福大大架构师每日一题
2021/10/12
3190
2021-12-01:给定一个正数数组arr,代表每个人的体重。给
2021-12-01:给定一个正数数组arr,代表每个人的体重。给定一个正数limit代表船的载重,所有船都是同样的载重量。
福大大架构师每日一题
2021/12/01
2440
2021-09-03:直线上最多的点数。给你一个数组 points ,其
2021-09-03:直线上最多的点数。给你一个数组 points ,其中 pointsi = xi, yi 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。力扣149。
福大大架构师每日一题
2021/09/04
2540
2021-12-11:最大正方形。在一个由 ‘0‘ 和 ‘1‘ 组成的二维矩
2021-12-11:最大正方形。在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。力扣221。
福大大架构师每日一题
2021/12/12
5410
2021-06-24:求一个字符串中,最长无重复字符子串长度。
2021-06-24:求一个字符串中,最长无重复字符子串长度。 福大大 答案2021-06-24: 方法一:滑动窗口。自然智慧。 不重复的时候,右指针右移;重复的时候,左指针右移。 方法二:求出最右不重复位置。 map:key是值,value是数组序号,初始值value都是-1。 时间复杂度:O(N)。空间复杂度:O(不同字符个数)。 代码用golang编写。代码如下: package main import "fmt" func main() { s := "moonfdd" ret1 := le
福大大架构师每日一题
2021/06/25
2800
2021-06-24:求一个字符串中,最长无重复字符子串长度。
2021-08-21:给定一个数组arr,长度为N > 1,从中间切一
2021-08-21:给定一个数组arr,长度为N > 1,从中间切一刀,保证左部分和右部分都有数字,一共有N-1种切法,如此多的切法中,每一种都有:绝对值(左部分最大值 – 右部分最大值)。返回最大的绝对值是多少?
福大大架构师每日一题
2021/08/21
2880
2021-08-21:给定一个数组arr,长度为N > 1,从中间切一
2021-07-06:股票问题3。给定一个数组,它的第 i 个元素是
2021-07-06:股票问题3。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
福大大架构师每日一题
2021/07/06
3910
2021-07-06:股票问题3。给定一个数组,它的第 i 个元素是
推荐阅读
相关推荐
力扣621——任务调度器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档