判断集合中是否有两个数的和等于某个给定整数
来源:互联网 发布:java工程师工作规划 编辑:程序博客网 时间:2024/05/22 06:57
转载自:http://www.cnblogs.com/freewater/archive/2011/09/01/2162417.html
给定一个整数的集合S, 有一个整数x,判断S中是否有两个数相加等于x.
解法1《算法导论》
解题步骤:
1. 对数组S进行归并排序。
2. 构造数组S’={z : z=x-y, y∈S},并排序。由于S已经有序,构造与排序可一并完成。
3. 删除S中重复的元素使仅保留一个,对S’进行同样的操作。
4. 合并S和S’,并保证合并后有序,这里可以使用归并排序的思想。
5. 如果在合并后的数组中存在连续两个相同的元素,并且这种元素的个数大于1,那么有解。
设想在合并后的数组中存在连续两个w,则w分别属于S和S’,那么S中存在y使得w=x-y,即x=y+w。因此,S中元素w和y的和为x。
步骤1的运行时间为Θ(n lg n),其余步骤运行时间为Θ(n),因此总的时间代价为Θ(n lg n)。
解法2:
对S排个序O(nlgn),然后用两个指针p1,p2分别指向头尾,
if(p1+p2 == x)
return true;
else if(p1 + p2 > x)
p2--;
else
p1++;
直到2指针相遇,如果没有找到,返回false
注:感觉是对的,但是如何证明呢?真的没有漏洞吗?知道的请给我留言
解法3
如果x不大的话.
申请x大小的数组byte t[x],memset 0.
遍历下集合S,对于小于x的数i将t[i]=1; 这是0(N);
然后对数组t[x]遍历. 循环查找i对应的t[x-i]是否为1. 这是O(X)
后记:
同样道理,找三个数之和也可以在n^2时间内完成。
sum=a[i]+b[i]+c[i];
等价找两个数其和为s=sum-a[i];
共有n个,每个查找为线性时间n;
nlgn+n^2=n^2。
- 判断集合中是否有两个数的和等于某个给定整数
- 判断一个有序数组中是否有两个数的和等于给定的数
- 【算法导论学习-005】整数集合S中是否存在两个数等于给定的一个整数
- 判断数组中是否存在和等于给定值的两个数
- 输出递增序列中不重复的两个数和等于某个给定的值
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
- 算法导论 2.3-7 给出一个运行时间为⊙(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素
- 描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
- 题目1.请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个证书x时,判断出S中是否存在有两个其和等于x的元素。
- 算法学习笔记----判断集合S中是否存在有两个其和等于x的元素
- 集合S中是否存在两个元素使它们的和等于另外一个整数
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x
- 判断集合S中是否存在两个其和等于x的元素
- 算法入门---判断集合S中是否存在两个其和等于x的元素
- 算法入门---判断集合S中是否存在两个其和等于x的元素
- 在给定数组中查找两个数的和等于给定的数
- 给出一个实数集合和一个实数,怎样判断集合中是否存在两个和等于该实数的元素
- 关于一个数组中两个数的和等于给定数的问题
- 关于mysql的常见操作SQL语句
- Java字节码指令简介
- nodejs文件操作
- 这是一篇新博客
- pgsql_json字段使用(复杂的json格式_ json_to_recordset函数的使用)
- 判断集合中是否有两个数的和等于某个给定整数
- html5触摸滑动
- python3.5 连接 mysql
- Excel VBA
- MonKey App 压力测试 (中级篇)《Monkey Script的使用》
- Spring IOC启动resources定位与加载过程
- Android中对/data/data/<package name>/files下文件的读写操作
- Android WebView开发问题及优化汇总
- PLSQL_闪回删除FlashBack Delete表误删除如何进行恢复(案例)