找数组中和为指定数的数字

题目:输入一个已经按升序排序过得数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。

要求:时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。

举例:输入数组1、2、4、7、11、15和数字15.由于4 + 11 = 15,因此输出4和11。、

答:

#include "stdafx.h"
#include <iostream>

using namespace std;

void FindNumber(int arr[], int length, int num)
{
    if (NULL == arr || length <= 0)
    {
        return;
    }
    int begin = 0;
    int end = length - 1;
    while (begin <= end)
    {
        if (arr[begin] + arr[end] == num)
        {
            cout<<num<<" = "<<arr[begin]<<" + "<<arr[end]<<endl;
            break;
        }
        else if (arr[begin] + arr[end] > num)
        {
            end--;
        }
        else
        {
            begin++;
        }
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    int arr[] = {1, 2, 4, 7, 11, 15};
    FindNumber(arr, sizeof(arr)/sizeof(arr[0]), 15);
    return 0;
}

运行界面如下:

posted @ 2012-08-23 20:24  venow  阅读(886)  评论(0编辑  收藏  举报