力扣练习——17 任务调度器
1.问题描述
给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。
然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。
你需要计算完成所有任务所需要的最短时间。
示例 :
输入:tasks = ["A","A","A","B","B","B"], n = 2
输出:8
解释:A -> B -> (待命) -> A -> B -> (待命) -> A -> B.
在本示例中,两个相同类型任务之间必须间隔长度为 n = 2 的冷却时间,而执行一个任务只需要一个单位时间,所以中间出现了(待命)状态。
说明:
任务的总个数为 [1, 10000]。
n 的取值范围为 [0, 100]。
可参考以下main函数:
int main()
{
vector<char> v;
int len,n;
char data;
cin>>len;
for(int i=0; i<len; i++)
{
cin>>data;
v.push_back(data);
}
cin>>n;
int result=Solution().leastInterval(v,n);
cout<<result<<endl;
return 0;
}
2.输入说明
首先输入任务的数目len
然后输入len个大写的 A - Z 字母,无空格、无引号
最后输入n
3.输出说明
输出一个整数,表示结果
4.范例
输入
6
AAABBB
2
输出
8
5.代码
#include<iostream> #include<queue> #include<algorithm> using namespace std; bool compare(int x, int y) { return x > y ; } int leastInterval(vector<char>tasks, int n) { //思想:桶思想,建立大小为 n+1 的桶子,个数为任务数量最多的那个任务 //参考https://leetcode.cn/problems/task-scheduler/solution/tong-zi-by-popopop/ //1.对所有任务出现个数进行排序 //int len = tasks.size();//获取任务总数 vector<int>vec(26);//用于记录每个任务出现的次数 for (int i = 0; i < tasks.size(); i++) { vec[tasks[i] - 'A']++; //巧妙统计每个字符出现的次数 } sort(vec.begin(), vec.end(), compare);//注意这边compare函数的编写,要用bool返回比较情况 ,此处为降序排列 //2.计算最后一个桶子的任务数x int cnt = 1;//用于计算最后一个桶子的任务数x while (cnt < vec.size()&& vec[cnt] == vec[0])//注意不要陷入死循环中,vec[cnt]==vec[0]必须在while()中,否则会死循环//while (cnt < vec.size()) { //{ if(vec[cnt]==vec[0]) cnt++;} //vec[0]存储的是在所有任务中的最大任务数量N,通过计算之后的vec[1],vec[2]etc中任务次数和vec[0]相等的个数,计算x cnt++; } int x = cnt; int N = vec[0]; //3.比较NUM1和NUM2大小,NUM1=(N-1)*(n+1)+x; NUM2=tasks.size(); 返回最大者 int NUM1 = (N - 1)*(n + 1) + x; int NUM2 = tasks.size(); return max(NUM1, NUM2); } int main() { vector<char> v; int len, n; char data; cin >> len; for (int i = 0; i < len; i++) { cin >> data; v.push_back(data); } cin >> n; int result = leastInterval(v, n); cout << result << endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理