算法本身不复杂,但是提供了一个跟有序数组相关的一个思路:记录首尾指针,由两边向中间缩进。
#include <iostream>
using namespace std;
bool findPairWithSum(int* a, int len, int sum, int& n1, int& n2)
{
if(a==NULL || len<2 || sum<a[0]+a[1] || sum>a[len-1]+a[len-2])
return false;
int low=0, high=len-1;
while(low<high)
{
if(a[low]+a[high] == sum)
{
n1 = a[low];
n2 = a[high];
return true;
}else if(a[low]+a[high] > sum)
high--;
else
low++;
}
return false;
}
int main()
{
int a[] = {1,3,6,8,12,23,45,59,70,98,100};
int len = sizeof(a)/sizeof(a[0]);
int n1, n2;
bool found;
int sum = 68;
found = findPairWithSum(a, len, sum, n1, n2);
if(found)
cout<<n1<<" "<<n2<<endl;
return 0;
}