• 621. Task Scheduler


    一、题目

      1、审题

      

      2、分析

        输入为任务数组,且相同的任务只有在距离 n 之后才能,才能再做。求最少处理时间。

    二、解答

      

      ①  首先统计出数组中,出现字符最多的次数 max, 出现次数最多的字符有几种 maxCount;

      ② 将出现次数最多的字符作为批次的划分,共有 max - 1 批空槽等待填写任务。

      ③ 每一批空槽有 n - (maxCount - 1) 个空槽位置

      ④ 除了已填写的最大批次任务还剩下的作业数 tasks.length - max * maxCount

      ⑤ 若 emptySlots > availableTasks 意味着没有足够的任务来填满空槽。则需要的处理时间为,返回总槽数 + 填写的最大任务数

      ⑥ 若 emptySlots <  availableTasks 意味着有足够的任务填写槽。剩下的任务可以足够分开添加在各个槽批次的末尾。则需要的处理时间为 tasks.length

        public int leastInterval(char[] tasks, int n) {
            int[] counter = new int[26];
            int max = 0;    // 出现的字符最多的次数
            int maxCount = 0;    // 统计出现次数最多的字符有几种种类,eg 3A3B3C。 则为 2 AB
            for(char task: tasks) {
                counter[task - 'A']++;
                if(max == counter[task - 'A'])
                    maxCount++;
                else if(max < counter[task - 'A']) {
                    max = counter[task - 'A'];
                    maxCount = 1;
                }
            }
            int partCount = max - 1;    // 空槽有几批
            int partLength = n - (maxCount - 1);    // 每一批空槽有几个空槽位置
            int emptySlot = partCount * partLength;    // 总的空槽个数
            int availableTasks = tasks.length - max * maxCount;    // 除了 AB 还剩下的作业数
            int idles = Math.max(0, emptySlot - availableTasks);     //  emptySlots > availableTasks 意味着没有足够的任务来填满空槽
            return tasks.length + idles;
        }
  • 相关阅读:
    图片和xml文件的转换
    WPF的样式(Style)继承
    .NET的序列化和反序列化
    WPF中的画板InkCanvas
    找到网页的源文件并找到歌曲文件的路径
    How to check if a ctrl + enter is pressed on a control?
    计算两个日期相差的天数
    图片保存到数据库以及从数据库中Load图片
    设计模式Command(命令模式)
    一个强大而且好用的UML设计工具
  • 原文地址:https://www.cnblogs.com/skillking/p/10931103.html
Copyright © 2020-2023  润新知