在N个数中找到两个数,其和为指定数【二分】

输入n(n<=1000,000)个整数,找出其中的两个数,他们之和等于整数m(假定肯定有解)。所有数都能用int表示

时间复杂度 O(n*log n )

//输入n(n<=1000,000)个整数,找出其中的两个数,他们之和等于整数m(假定肯定有解)。所有数都能用int表示
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1000005;
int data[maxn];
int t1,t2,ans;
void BS(int a[],int size)
{
	for(int i=0;i<size;i++)  {
		if(a[i] > ans)
			break;
		else {
			int l = 0;
			int r = size-1;
			while(l <= r) {
				int mid = l+(r-l)/2;
				if(a[mid] + a[i] == ans) {
					cout << "为第  和   第个数 : " << i+1 << " " << mid+1 << endl;
					return;
				}
				else {
					if(a[mid] + a[i] > ans)
						r = mid-1;
					else
						l = mid+1;
				}
			}
		}
	}
	cout << "找不到" << endl;
}
int main()
{
	int N;
	cin >> N;
	for(int i=0;i<N;i++) 
		cin >> data[i];
	cin >> ans;

	BS(data,N);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42765557/article/details/84673561