【编程之美】2.12快速寻找满足条件的两个数

给一个数组,找出其中一对和为sum的数字。

 

由于已经做过排好序的数组,找和为sum的题目。所以完全没有过多考虑就排了序,左右指针相互收缩着寻找。

跟答案上的方法也是一样的。

/*

start time = 16:57

end time = 17:15

*/

#include <iostream>

#include <stdlib.h>

using namespace std;



//由小到大排

int cmp(const void * a, const void * b)

{

    return *((int *)a) - *((int *)b);

}

bool get_TwoNumber(int * a, int len, int sum)

{

    int i, j;

    qsort(a, len, sizeof(a[0]), cmp);

    for(i = 0, j = len - 1; i < j;)

    {

        if(a[i] + a[j] == sum)

        {

            cout << a[i] << " + " << a[j] << " = "<< sum << endl;

            return true;

        }

        else if(a[i] + a[j] < sum)

        {

            i++;

        }

        else

        {

            j--;

        }

    }

    cout << "no vaild num!" << endl;

    return false;

}



int main()

{

    int a[10] = {5,6,1,4,7,9,8};

    get_TwoNumber(a, 7, 10);

    return 0;

}

 

你可能感兴趣的:(编程之美)