zoukankan      html  css  js  c++  java
  • 17任务调度器(621)

    作者: Turbo时间限制: 1S章节: DS:队列

    晚于: 2020-07-15 12:00:00后提交分数乘系数50%

    截止日期: 2020-07-22 12:00:00

    问题描述 :

    给定一个用字符数组表示的 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;

    }

    输入说明 :

    首先输入任务的数目len

    然后输入len个大写的 A - Z 字母,无空格、无引号

    最后输入n

    输出说明 :

    输出一个整数,表示结果

    输入范例 :

    6
    AAABBB
    2

    输出范例:

    8
    #include <iostream>
    #include <vector>
    #include <map>
    using namespace std;
    
    class Solution 
    {
    public:
        int leastInterval(vector<char>& tasks, int n) 
        {
            map<char,int> mp;
            int i=0,res,max=0;
            for(i=0;i<tasks.size();i++)
                mp[tasks[i]]++;//用map保存每个任务出现的次数
            for(i=0;i<mp.size();i++)
                if(mp[i]>max)
                    max=mp[i];//出现最多的字母
            res=(n+1)*(max-1);
    
            for(i=0;i<mp.size();i++)
                if(mp[i]==max)// 如果有出现相同最多次的,也加上,题目中为A,B,加上2
                    res++;
            return res>tasks.size()?res:tasks.size();//结果可能比tasks.size()短,此时选择tasks.size()
    
        }
    };
    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;
    }
    //https://leetcode-cn.com/problems/task-scheduler/solution/tong-zi-by-popopop/
  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/zmmm/p/13620202.html
Copyright © 2011-2022 走看看