面试题39:求和为指定值的两个数
题目:给定一个递增数组和一个数字S,在数组中找到两个数使得它们之和正好是S。
思路:设置两个游标分别指向数组的首尾元素,判断他们之和与指定值的大小,适当调整游标位置,直到满足要求为止
代码如下:
#include "stdafx.h"#include <iostream>using namespace std;//递增数组nArr的长度为nLength,指定和为sum//从数组中找到两个数存放在nNum1和nNum2中,它们之和等于sumbool FindNumbersWithSum(int nArr[], int nLength, int sum, int &nNum1, int &nNum2){ if (nArr == NULL || nLength < 2) { return false; } int nLow = 0; int nHigh = nLength - 1; while (nLow < nHigh) { if (nArr[nLow] + nArr[nHigh] > sum) { nHigh--; } else if (nArr[nLow] + nArr[nHigh] < sum) { nLow++; } else { nNum1 = nArr[nLow];nNum2 = nArr[nHigh];return true; } } return false;}int _tmain(int argc, _TCHAR* argv[]){int nArr[6] = {1,2,4,7,11,15};int nNum1 = 0;int nNum2 = 0;if (FindNumbersWithSum(nArr, 6, 15, nNum1, nNum2)){cout << "两个数分别为:" << nNum1 << " " << nNum2 << endl;}else{cout << "不存在这样的两个数!" << endl;}system("pause");return 0;}
运行结果: