输入一个按升序排序过的整数数组{1、2、4、7、11、15}以及一个整数数字15,我们可以从该数组中找到两个数字,即4和11,使得4+11=15。请实现一个时间上尽可能高效率的算法,当输入一个已经按升序排序过的整数数组和一个整数数字,在数组中查找两个数,使

admin2017-11-20  30

问题 输入一个按升序排序过的整数数组{1、2、4、7、11、15}以及一个整数数字15,我们可以从该数组中找到两个数字,即4和11,使得4+11=15。请实现一个时间上尽可能高效率的算法,当输入一个已经按升序排序过的整数数组和一个整数数字,在数组中查找两个数,使得它们的和正好是输入的那个整数数字。如果有多对数字的和等于输入的整数数字,输出任意一对即可。要求:
根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。

选项

答案算法实现如下: boo1 indTwoNumbersWithSum { //以下都为FindTwoNumbersWithSum函数的参数 int data [], //己排序的数组 unsigned int length, //已排序数组的长度 int&num1, //第一个数字 int&num2, //第二个数字 int sum, //输入的整数数字 } { boo1 found=faise; //空数组将会出错 if(1ength<1) return found; int ahead=length-1; int behind=0; while(ahead>behind) { int curSum=data[ahead]+data[behind]; //如果两个数之和恰好等于输入的数字 i f(curSum==sum) { numl=data[behind]; num2=data[ahead]; found=true, break; } //如果两个数之和大于输入的数字,将大的数字减少 else if(curSum>sum) ahead--; //如果两个数之和小于输入的数字,将小的数字加大 else behind++; } return found; }

解析
转载请注明原文地址:https://kaotiyun.com/show/2VRi777K
0

最新回复(0)