回复: 10
跳转到指定楼层
上一主题 下一主题
收起左侧

Amazon OA 2 - Round Robin

全局:

2017(1-3月) 码农类General 硕士 实习@amazon - 内推 - 在线笔试  | | Other | 应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
刷OA 2题目,看了好多关于Robin Round的帖子感觉都不对。所以来分享一下自己写的代码。已经检查过很多次了,求帮忙。
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
ingTimes是executionTimes的一个副本,表示当前任务剩余工作量,每次执行了任务就减去相应的执行时间直到0
lastActiveEndTime是用来检测waiting time的 只要有触碰到这个任务,这个时间就更新为当前时间

上一篇:亚麻OA2 面筋以及后续这个邮件是什么意思?
下一篇:amazon intern oa1
推荐
 楼主| skihyy 2017-1-20 05:05:37 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies

本帖子中包含更多资源

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
回复

使用道具 举报

🔗
 楼主| skihyy 2017-1-17 09:23:13 | 只看该作者
全局:
辛辛苦苦写的代码为何PO不上来……

  1. public class RoundRobin
  2. {

  3.     public static void main(String[] args)
  4.     {
  5.         // int[] a = { 0, 2, 4, 5 }, b = { 7, 4, 1, 4 };
  6.         // int[] a = { 0, 1, 3, 9 }, b = { 2, 1, 7, 5 };
  7.         int[] a = { 0, 1, 4 }, b = { 5, 2, 3 };
  8.         System.out.println(new RoundRobin().waitingTime(a, b, 3));
  9.     }

  10.     public float waitingTime(int[] requestTimes, int[] executionTimes, int interval)
  11.     {
  12.         if (null == requestTimes || 0 == requestTimes.length || null == executionTimes || 0 == executionTimes.length)
  13.         {
  14.             return 0;
  15.         }

  16.         int[] workingTimes = new int[executionTimes.length], lastActiveEndTime = new int[executionTimes.length];
  17.         for (int i = 0; i < executionTimes.length; i++)
  18.         {
  19.             workingTimes[i] = executionTimes[i];
  20.             lastActiveEndTime[i] = requestTimes[i];
  21.         }

  22.         // current work index
  23.         int curIndex = 0, curTime = 0, waitingTime = 0;
  24.         boolean allFinished = true;
  25.         while (true)
  26.         {
  27.             curIndex = (curIndex + 1) % requestTimes.length;

  28.             if (0 == workingTimes[curIndex])
  29.             {
  30.                 allFinished = true;
  31.                 for (int i = 0; i < workingTimes.length; i++)
  32.                 {
  33.                     if (0 != workingTimes[i])
  34.                     {
  35.                         allFinished = false;
  36.                         break;
  37.                     }
  38.                 }
  39.                 if (allFinished)
  40.                 {
  41.                     break;
  42.                 }
  43.                 else
  44.                 {
  45.                     continue;
  46.                 }
  47.             }

  48.             // must has received the job in order to start
  49.             if (curTime >= requestTimes[curIndex])
  50.             {
  51.                 if (0 <= workingTimes[curIndex] - interval)
  52.                 {
  53.                     curTime += interval;
  54.                     lastActiveEndTime[curIndex] = curTime;
  55.                     waitingTime += checkWaitingTime(requestTimes, workingTimes, lastActiveEndTime, curTime, curIndex);
  56.                     workingTimes[curIndex] -= interval;
  57.                 }
  58.                 else
  59.                 {
  60.                     curTime += workingTimes[curIndex];
  61.                     lastActiveEndTime[curIndex] = curTime;
  62.                     waitingTime += checkWaitingTime(requestTimes, workingTimes, lastActiveEndTime, curTime, curIndex);
  63.                     workingTimes[curIndex] = 0;
  64.                 }
  65.             }
  66.         }

  67.         return ((float) waitingTime) / requestTimes.length;
  68.     }

  69.     private int checkWaitingTime(int[] requestTimes, int[] workingTimes, int[] lastActiveEndTime, int curTime,
  70.             int curIndex)
  71.     {
  72.         int waitingTime = 0;

  73.         for (int i = 0; i < requestTimes.length; i++)
  74.         {
  75.             if (i != curIndex && curTime >= requestTimes[i] && 0 < workingTimes[i])
  76.             {
  77.                 waitingTime += (curTime - lastActiveEndTime[i]);
  78.                 lastActiveEndTime[i] = curTime;
  79.             }
  80.         }
  81.         return waitingTime;
  82.     }
  83. }
复制代码

补充内容 (2017-1-17 09:26):
在计算每一次等待时间的时候 用当前时间减去上次更新的时间就可以 直接减去当前工作时长是不对的
可以用下面情况
[0, 1], [3, 2], q = 3
直接用waiting += q的话
waiting time会是3不是1

评分

参与人数 1大米 +30 收起 理由
admin + 30

查看全部评分

回复

使用道具 举报

🔗
loserloser 2017-1-17 10:38:46 | 只看该作者
全局:
给楼主点赞
回复

使用道具 举报

🔗
MaggieMa21 2017-1-17 10:40:07 | 只看该作者
全局:
谢谢分享! 🙏🙏🙏
回复

使用道具 举报

🔗
boyzhirui 2017-1-17 11:41:42 | 只看该作者
全局:
http://wdxtub.com/interview/14520850399861.html
这个Blog的Round Robin没啥问题。
对于这个Test Case:int[] a = { 0, 2, 4, 5 }, b = { 7, 4, 1, 4 };
正确结果应该是7吧?
回复

使用道具 举报

🔗
Yoly0412 2017-1-19 03:58:07 | 只看该作者
全局:
小土刀blog里的代码没啥问题
回复

使用道具 举报

🔗
boyzhirui 2017-1-21 05:06:19 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies

本帖子中包含更多资源

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
回复

使用道具 举报

🔗
 楼主| skihyy 2017-1-21 11:01:58 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
回复

使用道具 举报

全局:
请问楼主有收到amazon的offer吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表