当前位置: 技术问答>java相关
100分求救,算法的问题
来源: 互联网 发布时间:2015-09-23
本文导语: 给定一个整数集合s,和一个整数n,设计一个时间复杂度为nlgn的算法 找出集合s中两数之和为n的数。 | 你想想 把集合s的元素先进行一次堆排序变成一个有序表, (heap sort O(n)~nlgn) 然后从第一个元素开...
给定一个整数集合s,和一个整数n,设计一个时间复杂度为nlgn的算法
找出集合s中两数之和为n的数。
找出集合s中两数之和为n的数。
|
你想想
把集合s的元素先进行一次堆排序变成一个有序表,
(heap sort O(n)~nlgn)
然后从第一个元素开始,比如5,那么你应该查找n-5,
然后对这个有序表用二分查找n-5(或者插值法,分块法都行)
(binary search O(n)~ lgn)
如果找到了,就把n和n-5都从表内删除,放在结果集里
如果没找到,什么也不做
查找完这个元素,在查找下一个元素
最坏情况下,一共要查找n次
n个二分查找 O(n)~ n*lgn
最终,O(n)~ nlgn
这些算法,书上都有,不用我给你写代码了吧?
把集合s的元素先进行一次堆排序变成一个有序表,
(heap sort O(n)~nlgn)
然后从第一个元素开始,比如5,那么你应该查找n-5,
然后对这个有序表用二分查找n-5(或者插值法,分块法都行)
(binary search O(n)~ lgn)
如果找到了,就把n和n-5都从表内删除,放在结果集里
如果没找到,什么也不做
查找完这个元素,在查找下一个元素
最坏情况下,一共要查找n次
n个二分查找 O(n)~ n*lgn
最终,O(n)~ nlgn
这些算法,书上都有,不用我给你写代码了吧?
|
step 1:先排序
将集合S用数组存储。设s有m个数
若m较大,则用堆排序,O(mlogm);
否则,用快速排序,平均时间kmlnm
step 2:找两者之和为n的数 (设无相同的数)
i=0;
j=m-1;
while(i
将集合S用数组存储。设s有m个数
若m较大,则用堆排序,O(mlogm);
否则,用快速排序,平均时间kmlnm
step 2:找两者之和为n的数 (设无相同的数)
i=0;
j=m-1;
while(i
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!