【演算法】輸入一個已經按升序排過的陣列和數字,在陣列中查詢兩個數字,使得它們的和正好是輸入那個數字。

pengfoo發表於2012-10-01

題目:輸入一個已經按升序排過的陣列和數字,
在陣列中查詢兩個,使得它們的和正好是輸入那個數字。
要求時間複雜度是 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;
}


 

相關文章