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,但是会重复输出符合条件的三个数
阅读全文
0 0
- 2sum问题和3sum问题
- 3Sum问题
- 3 Sum问题
- leetcode:3Sum问题
- 3-sum问题
- leetcode 3sum问题
- 3Sum问题
- 3-sum问题
- 算法-3Sum问题
- 3-sum问题
- 3-sum问题
- 剖析3-sum问题(Three sum)
- 2sum/3sum/ksum 问题
- 2Sum/3Sum/3SumClosest/4Sum系列问题
- 2sum,3sum,4sum问题总结
- 2Sum,3Sum,4Sum问题总结
- 【算法】2SUM/3SUM/4SUM问题
- 3sum colsest的问题
- leetCode-Subsets II
- 最后一站 session相关
- 学习笔记5
- hdu1512 Monkey King(可并堆插入+删除)
- java面向对象之抽象, 接口
- 3-sum问题
- 三级菜单
- 基于openerp的erpcmsone:可当网站程序可当内部知识管理及ERP,及前后端合一的通用网站程序选型,设计与部署
- 机器学习实战K-近邻算法
- 欢迎使用CSDN-markdown编辑器
- httpclient
- 惯性离心机概述
- singleton pattern
- 【TensorFlow】会话session(三)