3-sum问题

来源:互联网 发布:淘宝客机器人免费软件 编辑:程序博客网 时间:2024/06/07 03:22
#include <iostream>  #include <algorithm>using namespace std;  int binarysearch(int key,int a[],int hi){int lo=0;while(lo<=hi){int mid=lo+(hi-lo)/2;if(key<a[mid]) hi=mid-1;else if(key>a[mid]) lo=mid+1;else return  mid;}return -1;}void main()  {     int a[10]={-1,2,4,0,-2,8,-3,1,5,3};int hi=sizeof(a)/sizeof(int);sort(a,a+hi);int cnt=0;for(int i=0;i<hi;i++){for(int j=i;j<hi;j++){int k=binarysearch(-a[i]-a[j],a,hi);if(k>j){cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<endl;++cnt;}}}if(cnt==0)cout<<"no"<<endl;system("pause");} 

3-sum问题的复杂度大概是N^2 logN,自己实现了一下,和2-sum的问题方法类似。


#include <iostream>  #include <algorithm>using namespace std; void search(int key,int a[],int hi){int lo=0;int cnt=0;while((hi-lo)>1)//此处不写lo<hi,防止a[lo]和a[hi]指向同一个数{if(a[lo]+a[hi]<key) lo++;else if(a[lo]+a[hi]>key) hi--;else {cout<<-key<<" "<<a[lo]<<" "<<a[hi]<<endl;cnt++;lo++;hi--;}}if(cnt==0)cout<<"no"<<endl;}void main()  {     int a[10]={-2,-1,0,1,2,9,8,7,6,5};int hi=sizeof(a)/sizeof(int);sort(a,a+hi);for(int i=0;i<hi;i++){search(-a[i],a,hi-1);}system("pause");} 
此法复杂度为N^2,但是会重复输出符合条件的三个数

原创粉丝点击