algorithm - 查找无序数组中两个相邻数字之间的最大差异

标签 algorithm

我正在寻找一种算法在 O(n) 时间内解决以下问题:

  1. 给定一个由 n 个整数组成的无序数组(例如 {3, 5, 1})。
  2. “相邻”表示从有序数组 {1, 3, 5} 中选取 2 个数字,并且它们相邻。

如果数组已排序,找出任何一对相邻数字之间的最大差异。不需要确定选择了哪些元素,它们在哪里,或者实际对数组进行排序。

我只能找到一种需要大量内存来存储巨大位图的方法。标记输入中的所有数字,然后扫描位图以查找最大的零串。 (这是一个带重复消除的 Counting Sort,因此对于每个可能的输入数字只需要一个一位饱和计数器。)

这个位图解决方案更合适的是 O(n+m),其中 m 是所需位图的大小 = 最大输入 - 最小输入。包含 INT_MAX 和 INT_MIN 的小输入数组是这种方法的最坏情况。

如果有必要或有帮助,假设整数都是 machine word int,而不是任意整数。

最佳答案

进一步假设数组中整数的大小是有界的,例如可以这样做:

  1. 数组的基数排序 -> O(n)
  2. 找到最大的差异 -> O(n)

  1. 找到数组中的最小和最大整数 -> O(n)
  2. 分配一个大小为 max - min + 1 -> O(1) 的位向量,因为大小是有界的
  3. 设置数组中一个数对应的所有位-> O(n)
  4. 找到位向量中的最大距离 -> O(1) 因为大小是有界的

关于algorithm - 查找无序数组中两个相邻数字之间的最大差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32622827/

相关文章:

algorithm - 如何将二分匹配转换为独立集

迭代随机排列的算法

algorithm - 提要的设计方法

javascript - 如何在表示矩形的数组中获取与某个索引成对 Angular 线的元素

python - 计数排序算法的变体?

矩阵中数字分布的算法

algorithm - 当给定数字组时,如何找到代表所有数字的最小组集?

python - 双向二叉搜索树?

algorithm - 范围 split 问题

arrays - 找到具有给定约束的最大总和的对