您的位置:首页 > 其它

有序数组中两个数的和等于一个输入值的函数

2015-05-05 11:16 316 查看


题目:


输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度为O(N).

如果有多对数字的和等于输入的数字,输出任意一对即可。

例如输入数组1,2,4,7,11,15和数字15,由于4+11=15,因此输出4和11.

代码如下:

/*data[] 为有序数组,

length 为数组的长度

sum为用户输入的和

num1 为符合和等于sum的第一个数

num2 为第二个数*/

#include<iostream>

using namespace std;

bool FindTwoNumbersWithSum(int data[], unsigned int length, int sum, int& num1, int& num2)

{

bool found = false;

if (length < 1)

return found;

int begin = 0;

int end = length - 1;

while (end > begin)

{

long curSum = data[begin] + data[end];

if (curSum == sum)

{

num1 = data[begin];

num2 = data[end];

found = true;

break;

}

else if (curSum > sum)

end--;

else begin++;

}

return found;

}

int main()

{

int x, y;

int a[6] = { 1, 2, 4, 7, 11, 15 };

if (FindTwoNumbersWithSum(a, 6, 15, x, y))

{

cout << x << endl << y<< endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐