首页 > 其他 > 详细

12. 微软面试题:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字

时间:2014-03-09 17:34:58      阅读:426      评论:0      收藏:0      [点我收藏+]
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。

要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。


分析:

通过设置数组首尾指针,i = 0, j = len -1, 

因为数组是有序的,当array[i] + array[j] 大于给定的数字value时,j -- ,

如果小于, i++

如果相等,就恭喜你,找到了。 


例如输入数组12471115和数字15。由于4+11=15,因此输出411


实现如下:

#include<iostream>

using namespace std;

void findTwoValue(int* data, const int len, const int value, int &i, int &j)
{
	int ii = 0;
	int jj = len - 1;
	while(jj > ii)
	{
		if(data[jj] + data[ii] == value)
		{
			i = ii;
			j = jj;
			break;
		}
		else if( data[jj] + data[ii] > value)
		{
			jj --;
		}
		else
			ii ++;
	}
}


int main()
{
	int array[6] = {1,2,4,7,11,15};
	int v1 = -1, v2 = -1;
	findTwoValue(array, 6, 15, v1, v2);
	if(v1 == -1)
		cout << "cann‘t find array‘s two value add = 15 " <<endl;
	else
		cout << "输入数组1、2、4、7、11、15和数字15, 两个数为:" << array[v1] << "," << array[v2] << endl;
	return 0;
}

输出结果为:

输入数组1、2、4、7、11、15和数字15, 两个数为:4,11

12. 微软面试题:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字,布布扣,bubuko.com

12. 微软面试题:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字

原文:http://blog.csdn.net/hhh3h/article/details/20833131

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!