确定集合中的两个数字是否等于nlgn中的x

时间:2015-01-05 14:55:04

标签: algorithm

如果我自己的答案不正确,我不想要解决方案,因为我真的想自己解决这个问题。我想要的是要么这是正确的要么是否是不正确的,接下来是可能导致答案而不会破坏所有答案的提示或建议。

问题:

描述一个theta(nlgn)-time算法,给定一组n个整数和另一个整数x,确定S中是否存在两个元素,其总和正好是x。 (算法简介,2.3-7)

尝试:

首先,问题不会说明集合是否已排序。我认为它不是,并使用合并排序对其进行排序,因为在最坏的情况下它是theta(nlgn)。

然后我说好了,这仍然是theta(nlgn)的唯一方法是,如果我递归地将问题分成两部分。我的方法是从我们数组的索引i = 0开始,看看我需要x = i + k的值是什么,然后使用二进制搜索将问题分成两半,直到我找到k或不找到k。如果我没有找到k使得x = i + k,那么我将继续对索引i = 2到n-1的相同过程。这将导致theta(nlgn)。

如果删除常量,排序数组和找到k的总时间复杂度将加到theta(nlgn)+ theta(nlgn)= theta(2nlg2n)= theta(nlgn)。

1 个答案:

答案 0 :(得分:1)

是的,您的解决方案是正确的。当找到的元素k具有相同的索引i时,请不要忘记处理该案例。