问题描述:在一个有序数组中查找两个元素之和为某值,并返回这两个元素,通过定义双指针,不断向前与向后移动来查找,代码较为简单,如下所示:
- #include
- 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;
- }