升序數組中查找一個數的兩個加數

題目:

輸入一個已經按升序排序過的數組和一個數字,
數組

在數組中查找兩個數,使得它們的和正好是輸入的那個數字。spa

要求:

時間複雜度是 O(n)。若是有多對數字的和等於輸入的數字,輸出任意一對便可。3d

例如:

輸入數組 一、二、四、七、十一、15  和數字 15。因爲 4+11=15,所以輸出 4 和 11。code


比較簡單不作分析了。排序

代碼以下(GCC編譯經過):io

#include "stdio.h"
#include "stdlib.h"

void findTwoNumber(int a[],int n,int tag);

int main(void)
{

	int a[7] = {1,2,4,7,8,11,15};
	
	findTwoNumber(a,7,15);

	return 0;
}

void findTwoNumber(int a[],int n,int tag)
{
	int front,tail,sum;
	
	front = 0;
	tail = n-1;
	sum = front + tail;
	
	while(sum != tag && front < tail)
	{
		if(sum < tag)
			front++;
		else
			tail--;
			
		sum = a[front] + a[tail];
	}
	
	if(sum == tag)
		printf("%3d,%3d",a[front],a[tail]);
	else	
		printf("沒有符合題意的數組!");
}
相關文章
相關標籤/搜索