现在的位置: 首页 > 综合 > 正文

输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字

2013年11月07日 ⁄ 综合 ⁄ 共 615字 ⁄ 字号 评论关闭

题目:输入一个已经按升序排序过的数组和一个数字,

在数组中查找两个数,使得它们的和正好是输入的那个数字。

要求时间复杂度是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);
}

抱歉!评论已关闭.