问题:给定一个有序数组,再给定一个数c,判断数组中是否存在两个数a,b,满足a + b = c。要求时间复杂度$O(n)$,空间复杂度$O(1)$。
解决方法:
利用首尾两个指针,计算首尾的和,如果小于c,就移动首指针+1,否则就移动尾指针-1。当首尾指针相邻时,仍未找满足要求的a和b,就返回false。
Code:
bool check_add(double * data, int n, double x)
{
double * front = data;
double * back = data + n - 1;
while (front - back) {
double sum = *front + *back;
if (sum == x)
return true;
else if (sum < x)
front++;
else
back--;
}
return false;
}