您的位置:首页 > 其它

算法导论 练习 2.3-7

2016-04-15 22:31 204 查看

题目:

请给出一个运行时间为 Θ(nlgn)\Theta(nlgn)的 算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断S中是否存在有两 个其和为x的元素。

解答:

其实这是一个蛮经典的算法题目,我的leetcode题解上有这个算法,想看代码可以看看我的这篇博客

那么具体怎么实现呢?实际上这个问题有两个切入点:

1、 Θ(nlgn)\Theta(nlgn),咦?好熟悉

2、给定和SS,那就是对某个数CC在集合里找S−CS-C,乱序不好弄啊

这两点都会引导你想到排序,有序序列就好办了:

i指向一个位置,ii将arrayarray分成了两部分,00~ii和i+1i+1~n−1n-1,00~ii这部分是已经处理过的部分,i+1i+1~n−1n-1是待处理的部分

我们将jj指向i+1i+1 ;kk指向n−1n-1,然后像一次快排一样

如果sum<targetsum < target,说明sumsum太小,此时j++j++让sumsum变大,

如果sum>targetsum > target,说明sumsum太大,此时k–k–让sumsum变小,

如果sum==targetsum==target,说明已经找到元素,返回就可以
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: