先用归并排序对集合S中的整数进行排序,接着再用下面的子过程进行判断:
bool Func(int Array[], int first, int last, int x)
{
while (first < last)
{
if (Array[first] + Array[last] < x)
{
++first;
}
else
{
if (Array[first] + Array[last] > x)
{
--last;
}
else
{
return true;
}
}
}
return false;
}
显然判断过程的时间复杂度为n,结合归并排序的时间复杂度,容易得出整个算法满足题意的要求.