algorithm - 在 O(n) 中运行的数组 "maximum difference"算法?

标签 algorithm sorting

给定一个包含 N 个整数的数组,对数组进行排序,并在排序后的数组中找到相差最大的 2 个连续数字。

示例 – 输入 [1,7,3,2] 输出 4(排序数组为 [1,2,3,7],最大差为7-3=4)。

算法 A 在 O(NlogN) 时间内运行。

我需要找到一个在功能上与算法 A 相同的算法,该算法运行时间为 O(N)。

最佳答案

设数组为 X 且 n = length(X)。将每个元素 x 放入桶编号 floor((x - min(X)) * (n - 1)/(max(X) - min(X)))。每个桶的宽度是 (max(X) - min(X))/(n - 1) 并且最大相邻差异至少是那么多,所以有问题的数字在不同的桶中结束。现在我们所要做的就是考虑一对,其中一个是桶 i 中的最大值,另一个是桶 j 中的最小值,其中 i < j 并且 (i, j) 中的所有桶 k 都是空的。这是线性时间。

我们确实需要 floor 的证明:设函数为 f(X)。如果我们可以在线性时间内计算 f(X),那么我们当然可以在线性时间内决定是否

0 < f(X) ≤ (最大(X) - 最小(X))/(长度(X) - 1),

即 X 的元素是否均匀分布且不完全相同。令此谓词为 P(X)。 P 的支持具有阶乘(长度(X))连通分量,因此适用于代数计算模型的通常 Ω(n log n) 下界。

关于algorithm - 在 O(n) 中运行的数组 "maximum difference"算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262937/

相关文章:

python - 从字符串中删除数字

algorithm - 从理论上知道您需要多强大的微 Controller 来运行您的程序?

java - 我写了一个程序来计算 pi 但出了点问题

c# - 在 WPF 中对列表框进行排序

algorithm - NP-Complete 和图上的一些决策问题?

javascript - Tablesorter 仅按降序对习惯解析的数字进行正确排序,升序是错误的

string - 如何对字符串列表进行批量排序?

arrays - 通过 Ruby 中包含元素的哈希键按升序和降序对数组进行排序

mysql自然排序

algorithm - 给定数组 V,我们需要找到两个索引 (i,j) 使得 V[j] > V[i] 并且 (j - i) 最大