题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
#include<iostream>
using namespace std;
void test(int* data,int& first,int& last,int targetNum)
{
if(first>=last)
{
cout<<"NO NUM"<<endl;
return;
}
if((data[first]+data[last])==targetNum)
{
cout<<data[first]<<" "<<data[last]<<endl;
return;
}
else if((data[first]+data[last])<targetNum)
{
first++;
}
else
last--;
test(data,first,last,targetNum);
}
void main()
{
int data[]={1,2,4,7,11,15};
int targetNum=15;
int length=sizeof(data)/sizeof(int);
int firstIndex=0,lastIndex=length-1;
test(data,firstIndex,lastIndex,targetNum);
}

浙公网安备 33010602011771号