求数组中所有和为某固定数的所有数对

sallay 2010-01-20 09:26:46
有一个数组a[1000],里面存放了1000个整数,请找出该数组中所有和为M的数对。例如数组为-1,2,4,6,5,3,4,2,9,0,8,3,那么和为8的数对有(-1,9),(2,6),(4,4),(5,3),(5,3),(0,8)。

对这个问题大家有什么好的算法,请赐教。

我对这个问题的拙见在http://blog.csdn.net/sallay/archive/2010/01/20/5218500.aspx
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sallay 2010-01-27
  • 打赏
  • 举报
回复
谢谢各位的思路。
很多人都提出用快速排序然后再首尾向中间查找,或许这是一个比较好的方式。
gnefuil 2010-01-21
  • 打赏
  • 举报
回复
从小到大排序,重复的数字算作一个,但要记录重复的次数,没有重复的数字,重复次数为1
两个指针分别从左到右和从右到左移动,寻找和为M的两个数,每当找到一对,那么把它俩的重复次数相乘,计入总和。
如果M为偶数,则如果数列中存在M/2的话,设M/2的重复次数为n,然后把n*(n-1)/2计入总和
keeya0416 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mysword 的回复:]
每当找到一对,那么把它俩的重复次数相乘,计入总和。
如果M为偶数,则如果数列中存在M/2的话,设M/2的重复次数为n,然后把n*(n-1)/2计入总和
[/Quote]
这个是什么意思 没看明白。
绿色夹克衫 2010-01-20
  • 打赏
  • 举报
回复
有重复数字的时候怎么算?比如1000个全都是5,求和为10,需要输出多少对?
perfecttt 2010-01-20
  • 打赏
  • 举报
回复
对,先排序,再找就很容易了!
spirit_sheng 2010-01-20
  • 打赏
  • 举报
回复
先快速排序, 再首尾指针移动即可,

33,008

社区成员

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

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