《算法导论》第3版习题2.3-7:描述一个运行时间为O(nlgn)的算法,给定n个整数的集合S和一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素。
首先对S[0…n-1]进行非降序排序,然后左右夹逼即可
时间复杂度分析:排序为O(nlgn),左右夹逼为O(n),最终O(nlgn)
bool find(int A[], int len, int target)
{
if (len <= 1)
return false;
int i = 0;
int j = len - 1;
// i < j 不要写成 i <= j
while (i < j)
{
if (A[i] + A[j] == target)
return true;
else if (A[i] + A[j] < target)
++i;
else
--j;
}
return false;
}