中级农民
- 积分
- 103
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-5-4
- 最后登录
- 1970-1-1
|
OA被问到这个题,当时写的不对,现在又重写了一遍,结果是2.333
- class RoundRobin
- {
- public float avgTime(int num, List<Integer> arrivingTime, List<Integer> runningTime, int fixedTime)
- {
- if(num <= 0) return 0;
- int waitingTime = 0, currIndex = 0, currTime = arrivingTime.get(currIndex);
- Queue<Process> queue = new LinkedList<>();
- queue.offer(new Process(arrivingTime.get(currIndex), runningTime.get(currIndex)));
- while(!queue.isEmpty())
- {
- Process process = queue.poll();
- waitingTime += currTime - process.endTime;
- int currRunningTime = fixedTime;
- if(process.remainingTime <= fixedTime) currRunningTime = process.remainingTime;
- currTime += currRunningTime;
- for(int i = currIndex+1; i < num; i++)
- {
- if(arrivingTime.get(i) <= currTime)
- {
- queue.add(new Process(arrivingTime.get(i), runningTime.get(i)));
- currIndex++;
- }
- }
- if(process.remainingTime > fixedTime)
- {
- process.endTime += fixedTime;
- process.remainingTime -= fixedTime;
- queue.offer(process);
- }
- }
- return (float) waitingTime/num;
- }
- private class Process
- {
- public int endTime, remainingTime;
- public Process(int endTime, int remainingTime)
- {
- this.endTime = endTime;
- this.remainingTime = remainingTime;
- }
- }
- public static void main(String[]args)
- {
- RoundRobin roundRobin = new RoundRobin();
- List<Integer> arrivingTime = new ArrayList<>();
- List<Integer> runningTime = new ArrayList<>();
- arrivingTime.add(0); arrivingTime.add(1); arrivingTime.add(4);
- runningTime.add(5); runningTime.add(2); runningTime.add(3);
- double avg = roundRobin.avgTime(3, arrivingTime, runningTime, 3);
- System.out.println(avg);
- }
- }
复制代码 |
|