输入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;
}