寻找和为x
问题
实现一个时间复杂度为θ(nlogn)的算法,该算法对给定n个整数的集合S和另一个整数x,确定S中是否存在两个其和刚好为x的元素。
分析
利用快速排序等算法, 将数组变成有序数组,从左右依次向中心检测, 知道找到和为x的两个元素返回1,或者整个数组遍历完毕返回0
#include <iostream>
#include <algorithm>
using namespace std;
int a[1000];
int N;
int X;
int find(){
int i=0, j=N-1;
//从数组两端向中间递归
while(i<j){
if(a[i]+a[j]<X)
i++;
if(a[i]+a[j]>X)
j--;
else return 1;
}
return 0;
}
int main(){
cin>>N;
for(int i=0; i<N; i++)
cin>>a[i];
//利用算法库中的sort算法时间复杂度为(nlogn)
sort(a, a+N);
// for(int i=0; i<N; i++)
// cout<<a[i]<<" ";
cin>>X;
int flag = find();
cout<<flag;
return 0;
}