实现一个时间复杂度为O(nlogn)的算法,该算法对给定n个整数的集合S和另一个整数x,确定S中是否存在两个其和刚好为x的元素
输入格式:
第一行是一个正整数n(n<=10000 )和一个正整数x,以空格分隔,其中n个正整数和x的取值均介于1和100000之间。接下来的1行是n个正整数,之间以空格分隔
输出格式:
如果S中存在两个和为x的元素,则输出1,否则输出0。
输入样例:
10 16
8 4 2 3 1 9 5 7 6 10
输出样例:
1
- 空间换时间,以数据大小为下标进行存储,只需要两遍一层循环即可(下面有实现)
- 利用快速排序整理数组,取出小于x的那一部分,设置low和high两个变量从两边遍历即可
第二种方法关键代码:
int flag=0;
while(low<=high){
if(a[low]+a[high]<x)
low++;
else if(a[low+a[high]>x)
high--;
else {flag=1;break;}