题目:
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
答案:
//20130112
#include <iostream>
using namespace std;
bool findSum(const int a[],
const int len,
const int sum,
int &num1, int &num2);
int main()
{
int a[10] = {1,3,4,6,8,11,13,16,19,20};
int num1 = 0,num2 = 0;
int sum = 18;
if (findSum(a,10,sum,num1,num2))
{
cout << num1 << " " << num2 << endl;
}
else
{
cout << "no number" << endl;
}
return 0;
}
bool findSum(const int a[],
const int len,
const int sum,
int &num1, int &num2)
{
if (len <= 0)
{
return false;
}
int p1 = 0;
int p2 = len - 1;
int temp=0;
while (p2 - p1 != 1)
{
temp=a[p1] + a[p2];
if (temp > sum)
{
--p2;
}
else
{
if (temp < sum)
{
++p1;
}
else
{
break;
}
}
}
if (temp == sum)
{
num1 = a[p1];
num2 = a[p2];
return true;
}
else
{
return false;
}
}