如果我自己的答案不正确,我不想要解决方案,因为我真的想自己解决这个问题。我想要的是要么这是正确的要么是否是不正确的,接下来是可能导致答案而不会破坏所有答案的提示或建议。
问题:
描述一个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)。
答案 0 :(得分:1)
是的,您的解决方案是正确的。当找到的元素k
具有相同的索引i
时,请不要忘记处理该案例。