我们得到了一个整数数组:
45, 10, 56, 42, 95, 78.
我们必须找到两个具有最小差异的元素。 我在线性时间复杂度中做到了这一点,但它仅适用于排序顺序,它总共导致二次复杂度的运行时间。我们有什么方法可以用对数或线性时间复杂度来做到这一点吗?
提前致谢。
答案 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 } `