从未排序的数组中找出两个这样的元素,这些元素具有最小差异而不对数组进行排序

时间:2015-08-02 15:29:29

标签: java c data-structures array-algorithms

我们得到了一个整数数组:

45, 10, 56, 42, 95, 78.

我们必须找到两个具有最小差异的元素。 我在线性时间复杂度中做到了这一点,但它仅适用于排序顺序,它总共导致二次复杂度的运行时间。我们有什么方法可以用对数或线性时间复杂度来做到这一点吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

只需使用始终位于O( n * log n)的Heapsort对数组进行排序。 之后,您应用您的算法,正如您所说,在O(n)中。因此,n + n * log n

仍然存在O(n * log n)

答案 1 :(得分:-1)

`bool checkPair(int A[], int n, int K) { 取大小为 O(n) 的哈希表 H 对于 (i = 0 到 n-1)

  { 
  int x = K - A[i]
  if (H.search(x) is true) 
      return 1
  H.insert(A[i]) 

} 返回-1 } `