问题描述:在一个有序数组中查找两个元素之和为某值,并返回这两个元素,通过定义双指针,不断向前与向后移动来查找,代码较为简单,如下所示:
#include <iostream>
using namespace std;
bool getTwoSum(int array[], int length,int total, int& leftElem, int& rightElem)
{
if (nullptr==array||length<=0)
{
leftElem = 0;
rightElem = 0;
return false;
}
int *beginPtr = array;
int* endPtr = array+length-1;
while (endPtr>beginPtr)
{
int sum = *beginPtr + *endPtr;
if (sum == total)
{
leftElem = *beginPtr;
rightElem = *endPtr;
return true;
}
else if (sum < total)
{
beginPtr++;
}
else
endPtr--;
}
}
int main()
{
int array[] = { 1,2,4,4,5,6,7,8,9 };
int leftElem;
int rightElem;
if (getTwoSum(array, sizeof(array) / sizeof(array[0]), 11, leftElem, rightElem))
{
cout << "can find the two elems: " << leftElem << " " << rightElem << endl;
}
else
cout << "can not find the two elems" << endl;
system("pause");
return 0;
}