【今日头条2017内推】调度问题
来源:互联网 发布:杭州卡趣网络 编辑:程序博客网 时间:2024/05/12 06:24
解题思路
首先对所有的任务按照 提出时间,优先级,所需时间进行排序,即提出时间相等时按照优先级排序,优先级也相等时按照所需时间进行排序。
可以维护一个长度为M的堆,M为程序员员的数量,这个堆中存储的值是程序员完成某个任务的完成时间点,依次取排序后的任务,然后在堆中取一个程序员,取堆顶的那个,这个任务的完成时间即为提出任务时间和堆中取出的时间的较大值加上任务所需时间。然后再将这个时间更新进堆中。
需要注意的是输出的时候是按照输入的任务顺序进行输出的,因而需要保存任务的编号,然后按照编号由小到大的顺序输出结果。
这个题并没有在线上测试,线下写的,不知道有没得问题。。。。
import java.util.Arrays;import java.util.PriorityQueue;import java.util.Scanner;class Task implements Comparable<Task> { int startTime; int needTime; int level; int sequence; @Override public int compareTo(Task o) { // TODO Auto-generated method stub if (startTime > o.startTime) { return 1; } else if (startTime < o.startTime) { return -1; } else { if (level > o.level) { return 1; } else if (level < o.level) return -1; else { if (needTime > o.needTime) { return 1; } else if (needTime < o.needTime) return -1; else { return 0; } } } }}class FinishTime implements Comparable<FinishTime> { int sequence; int time; @Override public int compareTo(FinishTime o) { // TODO Auto-generated method stub return this.sequence > o.sequence ? 1 : (this.sequence < o.sequence ? -1 : 0); }}public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int M = sc.nextInt(); int P = sc.nextInt(); Task[] task = new Task[P]; for (int i = 0; i < P; i++) { Task t = new Task(); sc.nextInt(); t.startTime = sc.nextInt(); t.level = sc.nextInt(); t.needTime = sc.nextInt(); t.sequence = i; task[i] = t; } Arrays.sort(task); PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(M); for (int i = 0; i < M; i++) priorityQueue.add(0); int index = 0; FinishTime[] result = new FinishTime[P]; while (index < P) { int time = priorityQueue.poll(); int finishTime = Math.max(task[index].startTime, time) + task[index].needTime; priorityQueue.add(finishTime); FinishTime t = new FinishTime(); t.sequence = task[index].sequence; t.time = finishTime; result[index]=t; index++; } Arrays.sort(result); for(int i=0;i<P;i++) System.out.println(result[i].time); }}
阅读全文
0 0
- 【今日头条2017内推】调度问题
- 今日头条2017内推
- 【今日头条2017内推笔试题】数组序列
- 【今日头条2017内推笔试题】二维平面整数点集
- 【2017今日头条】头条校招
- 2018秋招 今日头条1017 推箱子
- 今日头条编程题 专辑问题
- 今日头条一面问题随记
- 今日头条项目各种问题
- 今日头条最大点问题
- 串珠问题(今日头条笔试)
- 2017今日头条测试开发
- 2017今日头条测试编程题
- 【算法】今日头条2017编程题
- 今日头条2017实习生笔试题解
- 头条校招(今日头条2017秋招真题)
- 2017今日头条实习测试
- 今日头条2017后端工程师
- 浅析数组指针、指针数组的区别
- QT5+VS2013环境搭建并实现一个简单计算器
- maven学习笔记:使用tomcat搭建局域网仓库
- IDEA注解不识别问题
- docker swarm 学习命令整理
- 【今日头条2017内推】调度问题
- jdbc打印最终SQL语句
- Android获取设备信息
- 性能监控之tomcat,jvisualvm远程连接tomcat配置
- JSON详解.追加
- 【网络爬虫】实现有道翻译提取
- PL/SQL无法使用中文条件查询解决的两种方法
- PHP TP3.2 导出excel文件功能的实现
- awr采样不自动刷新的问题