/*
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求:时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如:输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
//*/
#include <iostream>
#include <iomanip>
#include <limits>
using namespace std;
int main()
{
int numel[] = {1, 2, 3, 5, 11, 16, 23, 29, 47, 55, 56, 64};
int sz = sizeof(numel)/sizeof(numel[0]) ;
int sum = 50;
int ns,ne;
ns = 0;
ne = sz -1;
while(ns < ne){
while(numel[ns] + numel[ne] > sum && ne > ns){
--ne;
}
while(numel[ns] + numel[ne] < sum && ne > ns){
++ns;
}
if(numel[ns] + numel[ne] == sum ){
break;
}
}
if(numel[ns] + numel[ne] == sum ){
cout << numel[ns] << " + " << numel[ne] << " = " << sum << endl;
}else{
cout << "no elements satisfy the requirements!\n";
return -1;
}
return 0;
}