我正在寻找一种算法在O(n)
时间内解决以下问题:
n
整数数组(例如{3, 5, 1}
)。{1, 3, 5}
中选取2个数字,它们相邻。查找数组排序时相邻的任意数字对之间的最大差异。不需要确定选择了哪些元素,它们在哪里,或者实际对数组进行排序。
我只能找到一种需要巨大内存的方法才能获得巨大的位图。标记输入中的所有数字,然后扫描位图以查找最大的零运行。 (这是一个具有重复消除的Counting Sort,因此每个可能的输入数字只需要一位饱和计数器。)
此位图解决方案更恰当O(n+m)
,其中m
是所需位图=最大输入 - 最小输入的大小。包含INT_MAX和INT_MIN的小输入数组是这种方法的最坏情况。
如果有必要或有帮助,假设整数都是machine word int
s,而不是任意整数。
答案 0 :(得分:1)
在进一步假设数组中整数的大小有限的情况下,可以做一个例子:
或