【发布时间】:2019-07-08 04:28:21
【问题描述】:
这几乎是一个打印机队列问题。
示例输入:
6 0
1 1 9 1 1 1
第一行 = 两个数字,第一个是打印机作业的数量,第二个是您的作业在队列中的位置
第二行 = 每个作业的优先级。列出的第一个数字是第一个作业的优先级,依此类推。数字越大,优先级越高。
打印机无限期地运行这个循环:
- 读取队列头部的作业 J。
- 如果队列中有另一个作业的优先级高于 J,请将 J 移到队列末尾。
- 否则,执行作业 J(需要 1 分钟才能完成)并将其从队列中移除。
输出距离打印机完成作业的分钟数。
问题是位置很重要。因此,正如您在测试用例中看到的那样,您的作业在队列中排在第一位,这意味着它会被移到后面,因为它不是最高优先级,然后第二个作业也会被移到后面,并且您的作业将在 5 分钟后完成打印。
我认为 LinkedList 最适合这种情况,但您必须跟踪最高优先级,该优先级是动态更改的。 PriorityQueue 的问题是元素是基于一些比较器插入的,而我的结构的初始排序将基于位置。此外,您不能添加到 PriorityQueue 的后面。
所以,就知道要使用哪种结构,或者这个问题是否涉及任何结构而言,我有点卡在这里。
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
-
我已经澄清了我的答案并结合了你的例子。我意识到前面的描述有点快。如果不清楚或没有回答您的问题,请您看一下并告诉我?
标签: java algorithm data-structures