算法导论 练习 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,说明已经找到元素,返回就可以
相关文章推荐
- QUSTOJ 1712 DP
- AJAX系列二之XMLHttpRequest的请求和响应
- python10min系列之面试题解析:python实现tail -f功能
- 再谈用strace来看进程的动态调用-------顺便说说用strace来定位core dump
- poj1860(Bellman-Ford变形,含负权的单源最短路径,判断是否有正权环)
- Golang实现http文件上传小功能
- linux信号量的SEM_UNDO参数
- 树莓派备份SD卡,并且写入新SD卡方法
- wireshark解密https数据包方法
- ***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
- selenium一个具体页面的实现(结合autoit3和sikuli)
- Download the android source from china mirrors
- QUSTOJ 1713 线段树
- Flume安装
- 24点游戏算法
- Java设计模式--------建造者模式之进阶
- 寻找第K大的数(快排思想)
- conflicts with file from package mariadb-libs
- Python 练习实例20
- 【BFS】POJ 3278