算法题:从一个升序数组中,查找两个数,两数之和等于输入的数。

微软100道算法题-----输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求:时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对。

思路:设置两个指针,一个指向开头,一个指向结尾,两数相加,如果和大了,则右边的指针往左移,如果和小了,则左边的指针往右移。

int main(void)
{
	int arry[] = {1, 3, 4, 6, 7, 8, 9};
	int key = 11;
	int len = sizeof(arry)/sizeof(arry[0]);
	int i, sum;
	int *head = &arry[0];
	int *tail = &arry[len-1];
	for(i=0; i<len/2; i++)
	{
		sum = *(head) + *(tail);
		if(sum > key)
		{
			tail--;
		}
		else if(sum < key)
		{
			head++;
		}
		else if(key == sum)
		{
			printf("%d + %d\n", *(head), *(tail));
		}
		else 
			printf("该数组中没有两数之和满足条件\n");
	}
	return 0;
}
发布了50 篇原创文章 · 获赞 5 · 访问量 1533

猜你喜欢

转载自blog.csdn.net/qq_42483691/article/details/104565570