Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-12-21:任务调度器。 给你一个用字符数组 tasks 表示

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

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

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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2021-12-01:给定一个正数数组arr,代表每个人的体重。给
2021-12-01:给定一个正数数组arr,代表每个人的体重。给定一个正数limit代表船的载重,所有船都是同样的载重量。
福大大架构师每日一题
2021/12/01
2380
2021-09-03:直线上最多的点数。给你一个数组 points ,其
2021-09-03:直线上最多的点数。给你一个数组 points ,其中 pointsi = xi, yi 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。力扣149。
福大大架构师每日一题
2021/09/04
2480
力扣621——任务调度器
给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。
健程之道
2020/02/26
6780
面试必问:Top K问题进阶
之前我们已经聊过了Top K问题的本质以及解题思路的切入点,虽然我们面试不会遇到原题,总会有这样那样的限制条件或者变形,让题目变复杂变难。没关系,我们已经掌握了问题的核心,剩下的只要针对特定的限制或条件做相应的处理,我们总可以把未知的问题转换成我们熟悉的形式。
写代码的阿宗
2020/08/24
4810
2021-06-24:求一个字符串中,最长无重复字符子串长度。
2021-06-24:求一个字符串中,最长无重复字符子串长度。 福大大 答案2021-06-24: 采用滑动窗口。 代码用golang编写。代码如下: package main import "fmt" func main() { s := "moonfdd" ret := lengthOfLongestSubstring(s) fmt.Println(ret) } func lengthOfLongestSubstring(s string) int { // 哈希集合,记录每个字符
福大大架构师每日一题
2021/08/05
3170
2021-05-17:数组中所有数都异或起来的结果,叫做异或和。给定一个数组arr,可以任意切分成若干个不相交的子数组。其中一定
2021-05-17:数组中所有数都异或起来的结果,叫做异或和。给定一个数组arr,可以任意切分成若干个不相交的子数组。其中一定存在一种最优方案,使得切出异或和为0的子数组最多。返回这个最多数量。
福大大架构师每日一题
2021/08/05
3330
golang刷leetcode 任务调度器
给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。
golangLeetcode
2022/08/02
2670
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
2640
【Day31】力扣算法(超详细思路+注释)[1441. 用栈操作构建数组 ] [621. 任务调度器]
LeetCode 621. 任务调度器(贪心)
给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。
Michael阿明
2020/07/13
1.5K0
LeetCode 621. 任务调度器(贪心)
任务调度器 (难度:中等) - Day20201205
给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。
前端小书童
2020/12/17
6840
2022-01-24:K 距离间隔重排字符串。 给你一个非空的字符
给你一个非空的字符串 s 和一个整数 k,你要将这个字符串中的字母进行重新排列,使得重排后的字符串中相同字母的位置间隔距离至少为 k。
福大大架构师每日一题
2022/01/24
2410
常用算法之贪心算法
思路:求解问题时,总是选当前最好的选择,不从整体上考虑。因而选用贪心算法必须保证当前选的最好的必定是整体最好的。
爬蜥
2019/07/09
6400
621. 任务调度器
方法(贪心算法) 容易想到的一种贪心策略为:先安排出现次数最多的任务,让这个任务两次执行的时间间隔正好为n。再在这个时间间隔内填充其他的任务。
名字是乱打的
2022/01/12
4820
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
3150
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
5900
2021-11-13:至少有 K 个重复字符的最长子串。给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求
【SmartOS】轻量级多任务调度系统
SmartOS是一个完全由新生命团队设计的嵌入式操作系统,主要应用于智能家居、物联网、工业自动化控制等领域。 ARM Cortex-M系列微处理器几乎全都做成单核心,对于业务逻辑较复杂的物联网就显得难以使用,因此SmartOS设计了两个多任务调度系统: 1,多线程调度,重量级,逼近PC操作系统多线程用法。使用上需要特别小心,要合理分配每一个线程的栈空间大小,任务越多越容易出问题 2,大循环,轻量级。每个任务注册一个函数指针,然后由主线程轮询各个任务函数,轮流执行 本文主要讲解第二种,轻量级多任务调度系统
大石头
2018/01/09
1.6K2
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
2740
2021-06-24:求一个字符串中,最长无重复字符子串长度。
【面试高频题】难度 2.5/5,脑筋急转弯构造题
给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。
宫水三叶的刷题日记
2022/12/30
4320
【面试高频题】难度 2.5/5,脑筋急转弯构造题
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
1990
2021-10-12:验证回文串。给定一个字符串,验证它是否
2021-10-12:验证回文串。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串 。输入: "A man, a plan, a canal: Panama"。输出: true。解释:"amanaplanacanalpanama" 是回文串。力扣125。
福大大架构师每日一题
2021/10/12
3150
推荐阅读
相关推荐
2021-12-01:给定一个正数数组arr,代表每个人的体重。给
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档