升序数组中查找一个数的两个加数

题目:

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

在数组中查找两个数,使得它们的和正好是输入的那个数字。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("没有符合题意的数组!");
}
相关文章
相关标签/搜索