首页 > 代码库 > 一个数组中找到满足和为sum的两个数

一个数组中找到满足和为sum的两个数

如果考虑hashmap直接O(n)的速度,

如果不行,就先排序,两头指针很好推理,关键是

a[beg] +a[end]>sum,意思就是说a[end]太大了,最小的数的都不满足,所以排除a[end]

绝知此事要躬行

#include<iostream>
#include<algorithm>
using namespace std;

bool find(int *a,int sum,int len,int &ans1,int &ans2)
{
    int *beg=a;
    int *end=a+len-1;
    while(beg<end)
    {
        if(*beg+*end==sum)
        {
            ans1=*beg;
            ans2=*end;
            return true;
        }
        else if(*beg+*end>sum)

        {
            end--;

       
       
        }
        else
        {
            beg++;
       
        }
   
   
    }


    return false;
   


}
int main()
{
    int a[]={2,3,4,-10,34,23,23,-2,34};
    sort(a,a+sizeof(a)/sizeof(int));
    int ans1;
    int ans2;
    if(find(a,32,sizeof(a)/sizeof(int),ans1,ans2))
    {
        cout<<ans1<<endl;
        cout<<ans2<<endl;
    }
    else
    {
        cout<<"你所找的树没找到"<<endl;
    }
   system("pause");

    return 0;
}