模拟任务调度2题总结

模拟任务调度2题总结

任务模拟调度2题

Friday, September 1, 2023

11:03 AM

 

1. 有2个电梯,每个电梯一次只能载一个人,现在输入一行数字,表示不同的人从一层到达目的层数并且电梯返回到一层所需要的时间,计算送完所有人需要的最短时间。

测试用例:

输入:time=[4,1,2,3,1]

输出:6

2. 牛牛是一只聪明的牛,它是一个任务调度专家。在一个动物园中,有许多动物需要执行不同的任务。牛牛需要设计一个任务调度系统来管理动物的任务执行顺序。每个动物的任务执行时间不同,并且每个动物只能执行一次任务。牛牛希望通过合理的任务调度,使得完成所有任务的总时间最小。请你编写一个函数animalTaskScheduler,接收一个整数数组taskDurations和一个整数capacity作为参数,表示动物的任务执行时间和可以同时执行任务的容量。函数应返回一个整数,表示完成所有任务的最短时间。

测试用例:

输入:[3, 2, 4, 1, 5],3

输出:8

 

以上2题都是相同类型的题目,可以使用“模拟+贪心”的方法解决,具体思路是这样:注意这类题一般不能对已有的序列排序。我们使用一个优先队列保存已经处理的任务,我们每次从任务中取出一个未处理的任务加入到队列中,直到队列中元素个数等于capacity,然后在队列中取一个最短时间任务和当前的未处理任务的时间加在一起,得到一个结果放回队列,最终遍历完所有的未处理任务,选取优先队列中最大的一个元素作为结果返回。

代码如下:

 

import java.util.*;


public class Solution {
    public static void main(String[] args) {
        int[] taskDurations={4,1,2,3,1};
        int capacity=2;
        System.out.println(animalTaskScheduler(taskDurations, capacity));

    }
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param taskDurations int整型一维数组
     * @param capacity int整型
     * @return int整型
     */
    public static int animalTaskScheduler (int[] taskDurations, int capacity) {
        // write code here
        Queue<Integer> queue=new PriorityQueue<>();
        for(int i=0; i<taskDurations.length; i++){
            if(queue.size()<capacity){
                queue.add(taskDurations[i]);
            } else {
                int t=queue.poll();
                t+=taskDurations[i];
                queue.add(t);
            }
        }
        int res=0;
        while(!queue.isEmpty()){
            res=queue.poll();
        }
        return res;
    }
}

 

2 thoughts on “模拟任务调度2题总结

  1. 你好,看完你的博客文章,感觉很不错!希望与你网站首页友情链接
    流量卡知识网
    http://53go.cn/
    专注于移动/联通/电信推出的大流量多语音活动长短期套餐手机卡的相关知识的介绍普及

    听说互换友情链接可以增加网站的收录量,特此来换,如果同意的话就给[email protected][微信ganenboy]发信息或者就在此回复下吧!【建站问题也可以一起讨论!】

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注