寻找和为定值的两个数-三种解法

来源:互联网 发布:webbench 源码 编辑:程序博客网 时间:2024/06/14 21:56
#include<iostream>#include<vector>#include<assert.h>using namespace std;int main2017713(void)//解法1 时间复杂度 n*n{    int a[] = { 1, 2, 4, 7, 11, 15,2,4,8,10,6,1,8,3,4,5,6,7,8,9,10 }, n = sizeof(a) / (sizeof(&a));    for (int i = 0; i < n-1; i++)        for (int j = i + 1; j < n; j++)        if ((a[i] + a[j]) == 15)            cout << a[i] << " " << a[j] << " " << 15 << endl;    system("pause");    return 0;}int Binarysearch(int *a, int n , int x){    assert(a != NULL);    int high = n - 1, low = 0, mid = 0;    while (low <= high)    {        mid = (low + high) / 2;        if (a[mid] == x)            return mid;        else if (a[mid] > x)            high = mid - 1;        else            low = mid + 1;    }    return -1;}int Binarysearch1(int *a, int low, int high, int x){    assert(a != NULL);    if (low > high)        return -1;    int mid = (low + high) / 2;    if (x == a[mid])        return mid;    else if(x > a[mid])        return Binarysearch1(a, mid + 1, high, x);    else        return Binarysearch1(a, low, mid - 1, x);}void main20171714(void)  {    int a[] = { 1, -1, 2, 0, 12, 8, 7 }, n = sizeof(a) / sizeof(&a);    int ret = Binarysearch(a, n, 80);    int ret1 = Binarysearch1(a,0, n-1, 80);    if (ret1)        cout << (a[ret1] == 8) << endl;    else        cout << a[ret1] << endl;    system("pause");}int main20171714_2(void)//解法2 时间复杂度nlgn{    int a[]{1, 2, 4, 7, 11, 15}, n = sizeof(a) / sizeof(&a);    int temp1;    cin >> temp1;    for (int i = 0; i < n; i++)    {        int ret = Binarysearch(a, n, temp1 - a[i]);        if (ret!=-1)            cout << a[ret] << " " << a[i] <<" "<< temp1 << endl;    }    system("pause");    return 0;}int main(void)// 解法3从一头一尾查询{    int a[]{1, 2, 4, 7, 11, 15}, n = sizeof(a) / sizeof(&a);    int tmp;    cin >> tmp;    vector<int>a_tmp;    for (int i = 0; i < n; i++)        a_tmp.push_back(tmp - a[i]);    int j = a_tmp.size() - 1;    for (int i = 0; i < j;)    {        if (a[i] == a_tmp[j])        {            cout << a[i] << " " << a[j] << " " << tmp << endl;            i++;            j--;        }        else if (a[i] > a_tmp[j])            j--;        else if (a[i] < a_tmp[j])            i++;    }    system("pause");    return 0;}