O(n)时间复杂度的算法,用于在阵列中找到彼此之间具有最大差异的一对nos

时间:2011-02-14 08:21:42

标签: c algorithm

我得到一个整数数组,不一定排序。我必须找到一对nos,它们之间的差异与阵列中任何另一对nos相比最少。时间效率应为O(n)。

5 个答案:

答案 0 :(得分:7)

我很确定你无法为这个问题得到一般的线性时间算法!

但是,由于你有(有界)整数,你可以作弊一点,然后开始使用基数排序对数组进行排序,这是线性时间!然后找到最近的相邻对,再次是线性的。

答案 1 :(得分:1)

如果您正在寻找任何一对不同整数之间的最小绝对差异,那么ltjax的算法将在线性时间内给出答案。然而,正如问题所述,负数是有效的;在这种情况下,使用线性搜索找到最大的,L和最小的S,然后答案是S - L.

答案 2 :(得分:0)

我认为如果我通过线性搜索得到第一个最小元素然后再次应用循环来获得第二个最小元素可能没有错。例如 MIN1 = A [0]; 对于(I = 0;的iA [I])          MIN1 = A [1]; } MIN2 = A [1]; 对于(I = 1;的iA [I])          MIN2 = A [1]; } DIFF = MIN2-MIN1;

答案 3 :(得分:0)

我认为你可以找到最少两个数字,并以这种方式找到差异。 index i指向0,索引j指向1, 尝试通过i在偶数索引中找到min1,在单次迭代中通过j找到奇数索引中的min2和sub min1,min2。

答案 4 :(得分:0)

如果您知道最大位数,则在空格和时间中应用基数排序O(n)