在排序数组中查找和为给定值的两个数字

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

例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

分析:一个数指向数组的第一个数,另一个数指向数组的最后一个数,如果两数之和大于给定的数,那么第二个数指向前一个数,如果两数之和小于给定的数,那么第一个数指向后一个数,如果两数之和与给定数相等,那么两个数所指就是所求。

#include<iostream>
using namespace std;
int main()
{
	int a[]={1,2,4,7,11,15};
	int i=0,j=5;
	int SUM=15;
	while(i<j)
	{
		int sum=a[i]+a[j];
		if(sum==SUM)
		{
			cout<<a[i]<<" "<<a[j]<<endl;
			break;
		}
		else if(sum>SUM)
			j--;
		else
			i++;
	}
	if(i==j)
		cout<<"无此两个数"<<endl;
	return 0;
}


相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页