如果考虑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
原文地址:http://www.cnblogs.com/hansongjiang/p/3795364.html