将非常简单的O(n ^ 3)算法优化为O(n ^ 2)算法。

时间:2014-09-26 04:34:26

标签: algorithm time big-o complexity-theory

我已经被困在这个问题很长一段时间了。设X,Y和Z为n个整数的集合。设k为任意整数。问题"你能找到X中的x,Y中的y和Z中的z,使得x + y + z = k"通过尝试所有组合,可以在O(n ^ 3)时间内明显地解决。给出一个在O(n ^ 2)中运行的算法。您可以假设sort是一种在O(n * log n)时间内运行的内置方法。这是一个旧测试的问题。任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

  

任何帮助将不胜感激。

我的帮助是提示的形式。

提示:

1 - 如果x + y + z == k,则z = k - x - y ...

2 - 如何在O(1)中测试集合成员身份? (这忽略了问题中的暗示......)

OR

2a - O(N log N) NM * M是什么? (为什么我选择O(N log N) ??)

答案 1 :(得分:0)

对数组进行排序。

对于数组中的每个z,检查k-z是否是两个元素的总和,在O(n)时间内(经典的访谈问题和解决方案,你会发现很多页面包含它)。