【发布时间】:2013-02-01 03:40:43
【问题描述】:
以下是“亚马逊”向我提出的面试问题。我还没有想出一个优化的解决方案。
问题陈述:
给定一个未排序的整数数组 n。 如果该数组中的任何整数相加与目标值相加,则返回“true”,否则返回false。
注意:
1)'n' could be 1000 or 10,000.
2) Target value could be 'negative'
3) It may be addition of any 'k' integers (not only two) , where k<=n.
测试条件:
i/p:- Array A[]= {6,7,3,0,12,-5,-6,100}
Target = 8
o/p:- TRUE
As, 6+7+(-5)=8
如果我们尝试以线性方式或正常方式进行操作,将花费 O(2^n) 时间复杂度。
所以我正在寻找任何可以进一步优化这个问题的方法或算法。
提前谢谢你!
【问题讨论】:
-
“任意两个整数相加”是什么意思?或任何数字?
-
如果我没听错,你被要求解决subset-sum problem,这是NP-complete。因此,不能合理地期望您比指数时间或伪多项式时间做得更好。
-
如果是一对整数,我想你的意思是 O(n^2) 时间,而不是 O(2^n)。
-
很遗憾只有两个人能理解这么清晰的问题。除了@nneonneo 和 kasavbere 之外的每个人都离得很远。人们不再阅读问题了吗?还是他们只是认为他们知道得这么多?
-
@KarthikT 否。可能是添加了“k”个数字,其中 k
标签: c algorithm optimization