题目:输入一个已经按升序排过的数组和数字,
在数组中查找两个,使得它们的和正好是输入那个数字。
要求时间复杂度是 O(n)。
如果有多对数字的和等于输入,出任意一即可例如输入数组 1、2、4、7、11 、15 和数字 15 。由于 4+11=,因此输出 4 和 11 。
#include<stdio.h>
void findTwoNum(int a[], int n, int dest)
{
int *begin = a,*end = a+n-1;
int sum = *begin + *end;
while(sum != dest && begin < end)
{
if(sum < dest)
sum = *(++begin) + *end;
else
sum = *begin + *(--end);
}
if(sum == dest)
printf("%d,%d\n",*begin,*end);
}
int main()//测试程序
{
int a[]={5,7,8,9,11,16,34};
findTwoNum(a, 7, 23);
return 0;
}