找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 299|回复: 3

找出升序数组中和为给定值的两个数字

[复制链接]

14

主题

65

回帖

0

积分

新手上路

积分
0
发表于 2013-7-1 23:09:42 | 显示全部楼层 |阅读模式
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。
接口说明
原型:
int FindTwoNumbersWithSum(int aData[], unsignedint uiLength, int sum, int *pNum1, int *pNum2);
输入参数:
        int aData[]           // 升序数组
        unsigned int uiLength // 数组元素个数
        int sum,              // 给定两个数组的和
输出参数(指针指向的内存区域保证有效):
        int*pNum1            // 第一个数字,对应数组索引小的
        int *pNum2            // 第二个数字,对应数组索引大的
返回值:
    找到返回1,异常返回0

14

主题

65

回帖

0

积分

新手上路

积分
0
 楼主| 发表于 2013-7-5 20:39:11 | 显示全部楼层
参考思路:
for i = 0, j = size; i < j;
&#160;&#160;&#160;&#160;tmp = data + data[j]
&#160;&#160;&#160;&#160;if tmp < sum
&#160;&#160;&#160;&#160;&#160;&#160; i++
&#160;&#160;&#160;&#160;else if tmp > sum
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;j--
&#160;&#160;&#160;&#160;else
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;赋值,返回成功

返回失败

210

主题

371

回帖

0

积分

管理员

积分
0
发表于 2013-7-8 20:25:21 | 显示全部楼层

回 boyfaceone 的帖子

boyfaceone:参考思路:
for i = 0, j = size; i < j;
    tmp = data + data[j]
    if tmp < sum
       i++
....... (2013-07-05 20:39)
这个思路确实不错,如果是我自己的话,我肯定都要从头开始遍历了,这里是从两头开始遍历,优化了很多啊。。。

14

主题

65

回帖

0

积分

新手上路

积分
0
 楼主| 发表于 2013-7-8 22:07:50 | 显示全部楼层

回 tyrone2497谁 的帖子

tyrone2497谁:这个思路确实不错,如果是我自己的话,我肯定都要从头开始遍历了,这里是从两头开始遍历,优化了很多啊。。。&#160;(2013-07-08 20:25)&#160;
呵呵,前提是数组是有序的。如果无序,那可能还是要从头遍历的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 15:05 , Processed in 0.094385 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表