题目:
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
解法: 建立2个索引,一个指向头,一个指向尾,头尾相加跟sum判断,小于sum的尾部减一,大于sum的头部加一即可。
代码:
void find_number(int *p, int len, int sum)
{
int *f = p;
int *l = p + len - 1;
while (f < l)
{
if ((*f + *l) < sum)
++f;
else if ((*f + *l) > sum)
--l;
else
{
std::cout << "The number is:" << *f << " " << *l << std::endl;
return;
}
}
}