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

时间:2015-09-17 04:54:13

标签: algorithm

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

  1. 给定{em>无序 n整数数组(例如{3, 5, 1})。
  2. “相邻”表示从有序数组{1, 3, 5}中选取2个数字,它们相邻。
  3. 查找数组排序时相邻的任意数字对之间的最大差异。不需要确定选择了哪些元素,它们在哪里,或者实际对数组进行排序。

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

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

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

1 个答案:

答案 0 :(得分:1)

在进一步假设数组中整数的大小有限的情况下,可以做一个例子:

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