首页 > 代码库 > 找出升序数组中和为给定值的两个数字

找出升序数组中和为给定值的两个数字

#include<stdio.h>
#include "OJ.h"

/*
功能: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。

输入: int aData[]           // 升序数组
      unsigned int uiLength // 数组元素个数
      int sum,              // 给定两个数组的和
      
输出: int *pNum1            // 第一个数字,对应数组索引小的
      int *pNum2            // 第二个数字,对应数组索引大的

返回: 找到返回true,异常返回false
*/
bool FindTwoNumbersWithSum(int aData[], unsigned int uiLength, int sum, int *pNum1, int *pNum2)
{
	/*在这里实现功能*/
	if (NULL == aData || 2 > uiLength)
	{
		return false;
	}
	int uiBegin = 0;
	int uiEnd =int( uiLength - 1);
	while(uiBegin < uiEnd)
	{
		if (sum == aData[uiBegin] + aData[uiEnd])
		{
			*pNum1 = aData[uiBegin] ;
			*pNum2 = aData[uiEnd] ;
			return true;
		}
		if (sum < aData[uiBegin] + aData[uiEnd])
		{
			uiEnd--;
		}
		if (sum > aData[uiBegin] + aData[uiEnd])
		{
			uiBegin++;
		}
	}

	return false;
}


int main()
{

	int  aData[] = {1};
	int  iNum1 =0, iNum2 =0;
	bool bReturn;

	bReturn = FindTwoNumbersWithSum(aData, 1,15, &iNum1, &iNum2);
	//cout<<bReturn<<"	"<<iNum1<<"	"<<iNum2<<endl;
	return 1;
}

找出升序数组中和为给定值的两个数字