【发布时间】:2012-07-10 02:15:11
【问题描述】:
我们必须将整数一个接一个地输入到一个数组中。在输入过程进行的同时,我们可能会被要求从顶部(最大)1/3 的数字中找出最小的数字,任意次数.
例如:
input 1
input 7
input 9
tell the number
input 21
input 8
input 5
tell the number
input 11
tell the number
输出应该是:
9
9
11
解释:
- 在第一次查询之前,数组的数字是 1 7 9,所以前 1/3 的数字是 9。因为它们只有一个数字,所以它也是最小的。
- 当第二个查询进行时,数组看起来像
1 7 9 21 8 5,所以排序数组将是:21 9 8 7 5 1,前 1/3 的数字是 21 和 9。其中最小的 将是 9 - 在最终查询数组中有
1 7 9 21 8 5 11,在对21 11 9 8 7 5 1排序时,前1/3 的数字将是21 和11。其中最小的是11。
数组的整数总数可以是250000
我的方法是使用分区选择算法,但已经超过时间限制。
【问题讨论】:
-
家庭作业?有什么问题?
-
问题不成立。在第三次请求时,一个集合包含 7 个数字,因此不清楚它的第三部分是什么。七个订购的项目可以分成三个尽可能相等的部分,如 3+2+2 或 2+3+2 或 2+2+3,从而给出“前 1/3”
21 11 9或21 11,得到答案9或11。任务描述确实定义了为什么它应该是 11 而不是 9。