假设我们有一个带有n个不同值的排序整数数组A,我们给出了一个未包含在A中的值M.
例如:A = [2,3,5,8,10],M = 4。 这个问题要求我们找到x"周围的值"相对于M,其中x将是从1到n的偶数。 如果x是2,我们将返回[3,5]。如果x为4,则返回[2,3,5,8]。 这个过程对我来说很有意义,我们如何在排序的数组中找到M的位置,并在我们增加x的同时获取任意一侧的值,并清楚地看到如何在线性中完成时间。但是,如果初始数组实际上没有排序并且仍然遵循输入和输出的相同要求,那该怎么办呢?
例如,如果A是A = [8,5,10,2,3],并且M = 4,则将x设置为2仍应返回[3,5]。有一个线性时间算法可以解决它,但如果有人可以提供一些非常有帮助的指针或方向。我考虑计算排序,但我们不知道整数的最大大小,所以我觉得在这种情况下使用它是不明智的。
答案 0 :(得分:4)
这可以在O(n)
时间内完成。创建两个列表:一个列表中的所有元素都大于M
,另一个列表中的所有元素都小于M
。现在使用selection algorithm查找x/2
中的larger_than_list
元素最小元素和(|smaller_than_list| - x/2)
中的smaller_than_list
元素。 Prune列表。