题目描述:
请给出一个运行时间为O(nlog(n))的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断是否存在有两个其和等于x的元素。
解题思路:
首先,穷举法,这个就是一组数据中任意两个加起来试试,这种方法可以列举出所有的情况
当然,这种方法太笨了,也不满足要求哦
其实,很容易想到要先对数据排序,然后再寻找
排序可以有很多种排序方法,效率也都不一样,这里不做讨论
那么假如一组数据排好序,怎么才能找出两个数的和等于预设的一个值呢?
我们先看一下:假如排好顺序的一组数据如下
1 1 3 4 7 7 8 10 15 15 17 81 100
比如想找出是否有两个数的和为17
那么,我们可以有两个指针a和b,分别指向头和尾,然后向中间找
1 1 3 4 7 7 8 10 15 15 17 81 100
a-> ..... <-b
如果发现和大于17,那么b左移,
如果和小于17,a右移
如果指针相遇了,还没找到,就是没有了
具体步骤如下:
初始化:
1 1 3 4 7 7 8 10 15 15 17 81 100
a