题目:给定一个已经按升序排好的数组,找出和为给定值得两个数字,找到一组即可返回,要求时间复杂度为o(n);
解题思路:定义两个指针,头指针志向数组头,尾指针指向数组尾,判断头指针和为指针的和,如果和比给定数大,则将尾指针前移,如果和比给定数小,则将头指针后移
#include <iostream>
using namespace std;
bool find(int arr[],int length, int num, int &ans1, int &ans2)
{
int head = 0;
int tail = length -1;
int sum = 0; //用于保存头尾和
while(head != tail)
{
sum = arr[head] + arr[tail];
if(sum == num)
{
ans1 = arr[head];
ans2 = arr[tail];
return true;
}
else if(sum > num)
{
tail--;
}
else
{
head++;
}
}
return false;
}