【发布时间】:2009-12-07 17:29:14
【问题描述】:
给定一个整数数组 A,找出其中任意 3 个和任意给定 T 的整数。
我在一些在线帖子上看到了这个,声称它有一个 O(NlogN) 解决方案。
对于 2 个数字,我知道 hashtable 可以帮助 O(N),但对于 3 个数字,我找不到一个。
我也觉得这个问题听起来对一些难题很熟悉,但记不起名字,因此无法谷歌。 (虽然最糟糕的显然是 O(N^3),而对于 2 个数字的解决方案实际上是 O(N^2))
它并不能真正解决现实世界中的任何问题,只是让我烦恼..
有什么想法吗?
【问题讨论】:
-
右侧还有很多类似的帖子。 stackoverflow.com/questions/83547/…
-
这类似于子集求和问题,是NP-Complete。但是将子集长度限制为 3,可能会找到一个快速的解决方案。
-
一个与这个问题有相似之处的难(NP 完全)问题称为en.wikipedia.org/wiki/Knapsack_problem。当然,这里的限制是你只选择 3 个整数,最坏的情况是 O(n^3),所以它并不完全相同。
-
Finding three elements in an array whose sum is closest to a given number 为这个问题提供了一些 O(n^2) 的解决方案。
标签: algorithm