41.和为s的两个数字 VS 和为s的连续正数序列

  题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。

  思路:定义两个指针,一个放在头部,一个放在尾部,因为是有序的。所以当两个指针所指的数的和大于s时,尾指针向前移,和小于s时,头指针向后移。

#include<iostream>
using namespace std;

bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2)
{
    bool found = false;

    if (length < 1 || num1 == NULL || num2 == NULL)
    {
        return found;
    }

    int behind = length - 1;
    int ahead = 0;

    while (behind > ahead)
    {
        long long curSum = data[ahead] + data[behind];

        if (curSum == sum)
        {
            *num1 = data[ahead];
            *num2 = data[behind];
            found = true;
           // cout << *num1 << " " << *num2 << endl;
            break;
        }
        else if (curSum > sum)
        {
            behind--;
        }
        else
        {
            ahead++;
        }
    }

    return found;

}

void test()
{
    int data[] = {1, 2, 4, 7, 11};
    int num1, num2;
    bool result = FindNumbersWithSum(data, 5, 15, &num1, &num2);
    if (result)
    {
        cout << num1 << " " << num2 << endl;
    }
}

int main()
{
    test();

    return 0;
}

猜你喜欢

转载自my.oschina.net/134596/blog/1806891