我有一个整数数组
我考虑先对数组进行排序,然后使用双指针方法(如https://www.geeksforgeeks.org/two-pointers-technique/所述)来找到最小值。时间复杂度为
A
,包含正数和负数。我需要找到最小的值 abs(A[i] + A[j] - k)
,其中 i != j
。我考虑先对数组进行排序,然后使用双指针方法(如https://www.geeksforgeeks.org/two-pointers-technique/所述)来找到最小值。时间复杂度为
O(n*log(n))
。能否在 O(n)
时间内完成呢?
[1, 2, 3, 5, 8]
并且k=4
,那么你的解决方案应该是i=0, j=3
,但是你找不到它。 - scohe001abs
,我会同意你的看法,但在一个最小化问题中,abs
改变了一切。我们实际上正在寻找一个数组中两个值的和最接近k
的总和。(因此,k
在这里实际上非常重要) - scohe001unordered_map
,你可以在O(log(n))
的时间内找到与你正在查找的任何值最接近的值,以形成可能的一对,但你仍然需要循环遍历数组中的所有值。使用该算法的最短时间将是O(nlog(n))
。 - scohe001