您的位置:首页 > 其它

和为s的两个数字

2015-02-02 21:10 78 查看
1.问题描述

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s,如果有多对数字的和等于s,输出任意一对即可。(来自《剑指offer》)

2.分析

首先想到的可能是穷举,但是这样的话就会浪费掉递增排序的这一性质,并且时间复杂度时o(n2) ,因为他是递增的 ,我们可以设置两个指针一个指向头一个指向尾。然后 求和 如果等于的话,就得到了一对答案,如果大于,那我们就向前移动尾指针,如果小于我们就向后移动头指针,通过这种方法来找答案时间复杂度低。

3.代码

void FindNumbersWithSum(int* array,int length,int* num1,int* num2,int sum)
{
if (array == NULL || length <= 0 || num1 == NULL || num2 == NULL)
{
return;
}

int end = length - 1;

int start = 0;

while (start < end)
{
int result = array[end] + array[start];

if (result == sum)
{
*num1 = array[start];

*num2 = array[end];

return;
}
else if(result > sum)
{
end --;
}
else
{
start ++;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐