題目:
題目:輸入一個已經按升序排序過的數組和一個數字,
在數組中查找兩個數,使得它們的和正好是輸入的那個數字。
要求時間複雜度是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;
}
}