码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-06-21 07:38:14      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:os   name   io   amp   一个   ios   

如果考虑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;
}

一个数组中找到满足和为sum的两个数,布布扣,bubuko.com

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

标签:os   name   io   amp   一个   ios   

原文地址:http://www.cnblogs.com/hansongjiang/p/3795364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!