algorithm - 计算数组中的值 "surround"数组外的不同值

标签 algorithm sorting

假设我们有一个具有 n 个不同值的排序整数数组 A,并且给定了一些不包含在 A 中的值 M。

例如:A = [2,3,5,8,10],M = 4。 该问题要求我们找到与 M 相关的 x“周围值”,其中 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]。有一个线性时间算法可以解决它,但是如果有人可以提供一些非常有帮助的指示或方向。我考虑过计数排序,但我们不知道整数的最大大小,所以我觉得在这种情况下使用它并不明智。

最佳答案

这在 O(n) 时间内是可能的。创建两个列表:一个包含数组中所有大于 M 的元素,另一个包含数组中所有小于 M 的元素。现在使用 selection algorithmlarger_than_list(|smaller_than_list| - x/2) 中找到第 x/2 个最小元素 小于_列表Prune名单。

关于algorithm - 计算数组中的值 "surround"数组外的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48723534/

相关文章:

c++ - 如何创建包含(人工生成的)高斯(正态)分布的 vector ?

algorithm - 什么时候使用二项式堆?

java - 按行对矩阵进行排序并保留索引

sorting - 更改 FullCalendar 月 View 上的默认事件排序顺序

javascript - 使用 jquery 更改部分链接

java - 通过每次迭代更改每个字母将一个词转换为另一个词的算法应该形成另一个有意义的词?

javascript - Scrimba.com 交互式 DOM 记录算法

php - 使用 PHP 的 uasort 进行排序时保留键顺序(稳定排序)

c++ - 降序排序的最佳方法是什么?

javascript - While 循环没有将正确的结果推送到数组