/*
============================================================================
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//在排好序的数组arr中查找一对数的和==key
void findAPairEqualXSortArr(int arr[],int len,int key)
{
assert(len>1);
int s=0,e=len-1; //两个指针,一前一后
while(s<e)
{
int q=arr[s]+arr[e];
if(q==key)
{
printf("the pair is:%d %d\n",arr[s],arr[e]);
return;
}
else
{
if(q<key) ++s; //向右走
else --e; //向左走
}
}
}
int main(void) {
int arr[]={1,3,5,6,8,9,10,13,15};
int len=sizeof(arr)/sizeof(int);
findAPairEqualXSortArr(arr,len,13);
return 0;
}
第十四题:在一个排序数组中查找一对数,使得其和等于某个值
最新推荐文章于 2019-09-20 09:19:34 发布