This question already has answers here:
Determine whether or not there exist two elements in Set S whose sum is exactly x - correct solution?
(8个答案)
如果我自己的答案是错误的,我不想有解决办法,因为我真的想自己解决这个问题我想要的是一个是这个是正确的,或者一个不是这个是不正确的,然后是提示或者建议,可能会导致一个答案,而不会破坏一切。
问题是:
描述一个θ(NLGN)-时间算法,该算法给出n个整数和另一个整数x的集合S,确定S中是否存在两个元素,它们的和正好是x。
尝试:
首先,问题不说明集合是否已排序。我假设它不是,并使用合并排序,因为在最坏的情况下它是theta(nlgn)。
然后我说,好的,唯一的方法仍然是θ(nlgn),是我递归地把问题分成两个。我的方法是从数组的索引i=0开始,看看x=i+k需要什么值k,然后使用二进制搜索将问题一分为二,直到找到k或没有找到k为止。如果我没有找到一个k使得x=i+k,那么我将继续索引i=2到n-1的相同过程。这将导致θ(nlgn)。
从排序数组和找到k的总时间复杂度将增加到θ(nLgn)+theta(nLgn)=θ(2nLg2n)=θ(nLgn),如果移除常数。
(8个答案)
如果我自己的答案是错误的,我不想有解决办法,因为我真的想自己解决这个问题我想要的是一个是这个是正确的,或者一个不是这个是不正确的,然后是提示或者建议,可能会导致一个答案,而不会破坏一切。
问题是:
描述一个θ(NLGN)-时间算法,该算法给出n个整数和另一个整数x的集合S,确定S中是否存在两个元素,它们的和正好是x。
尝试:
首先,问题不说明集合是否已排序。我假设它不是,并使用合并排序,因为在最坏的情况下它是theta(nlgn)。
然后我说,好的,唯一的方法仍然是θ(nlgn),是我递归地把问题分成两个。我的方法是从数组的索引i=0开始,看看x=i+k需要什么值k,然后使用二进制搜索将问题一分为二,直到找到k或没有找到k为止。如果我没有找到一个k使得x=i+k,那么我将继续索引i=2到n-1的相同过程。这将导致θ(nlgn)。
从排序数组和找到k的总时间复杂度将增加到θ(nLgn)+theta(nLgn)=θ(2nLg2n)=θ(nLgn),如果移除常数。
最佳答案
是的,你的解决方案是正确的。当找到的元素k
具有相同的索引i
时,不要忘记处理该情况。
关于algorithm - 确定集合中的两个数字是否等于nlgn中的x ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27782046/
10-11 18:08