与 "Find a pair with the given difference" 中的时间复杂度混淆

Confusion with time complexity in "Find a pair with the given difference"

我正在尝试通过算法学习时间复杂度。我发现这个问题很有趣,上面写着:"Find the pairs with the given difference"。我了解问题并缩小到 2 种方法,它们是:

1. Using Binary search (Time complexity: O(nLogn) in worst case)
2. Use hash (Time comlexity: O(n), Space complexity : O(n))

谁能解释一下哪一个更适合实施。谢谢。

在引用的情况下我指的是这个问题: http://www.geeksforgeeks.org/count-pairs-difference-equal-k/

Please can someone explain which one is better to implement.

这是设计方案,没有明确的答案。每种解决方案都有其优点和缺点,选择 "correct" 取决于实际需求。
一些示例注意事项:

  1. 如果你的内存非常有限,或者元素流非常大(假设它在大小为 10GB 的文件上),哈希解决方案变得不可行,因为你不能将它存储在内存中,并且排序解决方案 +二分查找变得更有吸引力。
  2. 如果您希望大型数组的平均时间尽可能快,并且您拥有尽可能多的内存 - 由于 O(n) 平均时间复杂度,散列解决方案变得更具吸引力。
  3. 如果您的应用程序是实时运行的,并且您负担不起,无论如何都将花费 O(n^2) 时间,无论这种可能性有多低 - 它都会破坏您的公司。由于哈希解决方案在最坏的情况下(非常罕见的情况)会衰减到 O(n^2),因此您会想要避免它,并且再次 - 排序变得更有吸引力。
  4. 由于两者都比较高效,并且如果没有真正的限制(这可能是 99% 的情况),那么更容易实现和维护的是您应该选择的。