高分求算法,从一组无序整数数组中找出和为某整数的最佳算法

guostong 2007-07-02 11:34:12
一组无序数组,包括负数,要求找出一对和为48的整数。
要求复杂度必须小于 O(N^2)
...全文
389 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterx 2007-07-06
  • 打赏
  • 举报
回复
如果只找一组解是O(n),如果要找所有的解就不是了.
wangwang1103 2007-07-06
  • 打赏
  • 举报
回复
从两个数组中找相同的元素的问题??
为什么要找两个相同元素,如果没有24并不能说明没有两个元素之和等于48。

medie2005(阿诺)的解法不错,先排序用堆排序或者快排,然后用二叉搜索方法。
其时间时间复杂度为O(Nlog(N))
guostong 2007-07-05
  • 打赏
  • 举报
回复
to: Waterx
为什么不是 O(N),没有变化嘛
jinwei1984 2007-07-05
  • 打赏
  • 举报
回复
mark
waterx 2007-07-05
  • 打赏
  • 举报
回复
guostong(笨驴),如果所有元素的值都相等,排序后查找的复杂度就不是O(n)了.
bigc2000 2007-07-05
  • 打赏
  • 举报
回复
都是一样的
medie2005 2007-07-03
  • 打赏
  • 举报
回复
先将序列排序,得到新序列NEW[]。
再头到尾扫描一遍新序列。
对当前扫描点NEW[i],检查序列中是否元素与NEW[i]的和为48。这个检查过程可以这样:对NEW[i]后的元素实施二分查找,若存在值为48-NEW[i]的元素,那么,就找到了一组解了。

复杂度:排序耗时O(nlog(n)),查找耗时O(nlog(n))。因而总的复杂度是O(nlog(n))。
guostong 2007-07-03
  • 打赏
  • 举报
回复
zgg___()的思路不错,排序后查找的复杂度只有 O(N)了,复杂度基本上就是排序的复杂度。
zgg___ 2007-07-03
  • 打赏
  • 举报
回复
用48减去数组中所有的数,得到新的数组,这样问题就转化为:从两个数组中找相同的元素的问题。按照这个思路,可以采取下面的步骤:
1、看看数组中有没有两个24;
2、将数组排序得到有序数组a1(由小到大);
3、48-a1得到数组,经过逆序后得到数组a2;
4、比较a1和a2中的(第一个)数;if 相等 then 得到结果;
5、将4比较中较小的数的指针后移一个;if 到数组尾部 then 没有结果 else goto 4;

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧