• 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;
        }
  • 相关阅读:
    Dynamic proxy (good-原创)
    思维导图
    Android学习之 WebView使用小结
    shell语法简单介绍
    php反射类 ReflectionClass
    老鸟的Python新手教程
    腾讯云安装openvz,高速搭建測试环境
    NYOJ-1058 部分和问题
    NGUI ScrollView动态加入和删除对象。
    几种常见模式识别算法整理和总结
  • 原文地址:https://www.cnblogs.com/skillking/p/10931103.html
Copyright © 2020-2023  润新知