算法导论 练习 2.3-7

题目:

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

解答:

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

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

1、 Θ(nlgn) ,咦?好熟悉
2、给定和 S ,那就是对某个数C在集合里找 SC ,乱序不好弄啊

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

i指向一个位置, i array分成了两部分, 0 ~i i+1 ~ n1 0 ~i这部分是已经处理过的部分, i+1 ~ n1 是待处理的部分
我们将 j 指向i+1 k 指向n1,然后像一次快排一样
如果 sum<target ,说明 sum 太小,此时 j++ sum 变大,
如果 sum>target ,说明 sum 太大,此时 k sum 变小,
如果 sum==target ,说明已经找到元素,返回就可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值