【发布时间】:2020-01-22 20:40:41
【问题描述】:
如果在名为 A 的数组中有 2 个数字 X,Y,其中 X + Y = S,那么检查数组的最佳方法是什么? S可以是任意数(A中不一定存在)。
我说过,让我们排序最坏情况下花费 O(nlogn) 的数组然后让我们为第一个元素取 2 个指针,并为最后一个元素取另一个指针。
如果指针 1 + 指针 2,则开始 比较。如果结果大于指针 2,则 减少 1。如果结果小于指针,则 增加 指针 1 1. 直到我们移动 A 中的所有元素。
时间复杂度: nlogn + n(移入 2 个指针的最坏情况)= nlogn。
有没有更好的解决方案?
【问题讨论】:
-
在
HashMap(Dictionary) 的帮助下,您可以获得O(n)的时间复杂度(以及O(n)HashMap的空间使用情况)
标签: arrays algorithm time-complexity