14.輸入一個已經按升序排序過的數組和一個數字, 在數組中查找兩個數,使得它們的和正好是輸入的那個數字。

題目:

題目:輸入一個已經按升序排序過的數組和一個數字,
在數組中查找兩個數,使得它們的和正好是輸入的那個數字。
要求時間複雜度是O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。
例如輸入數組1、2、4、7、11、15和數字15。由於4+11=15,因此輸出4和11。


答案:

//20130112
#include <iostream>
using namespace std;

bool findSum(const int a[],
			 const int len,
			 const int sum,
			 int &num1, int &num2);
int main()
{
	int a[10] = {1,3,4,6,8,11,13,16,19,20};
	int num1 = 0,num2 = 0;
	int sum = 18;
	if (findSum(a,10,sum,num1,num2))
	{
		cout << num1 << "  " << num2 << endl;
	}
	else
	{
		cout << "no number" << endl;
	}
	return 0;
}

bool findSum(const int a[], 
			 const int len, 
			 const int sum, 
			 int &num1, int &num2)
{
	if (len <= 0)
	{
		return false;
	}
	int p1 = 0;
	int p2 = len - 1;
	int temp=0;
	while (p2 - p1 != 1)
	{
		temp=a[p1] + a[p2];
		if (temp > sum)
		{
			--p2;
		}
		else
		{
			if (temp < sum)
			{
				++p1;
			}
			else
			{
				break;
			}
		}
	}
	if (temp == sum)
	{
		num1 = a[p1];
		num2 = a[p2];
		return true;
	}
	else
	{
		return false;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章