3Sum
来源:互联网 发布:遗传算法中的objv 编辑:程序博客网 时间:2024/05/18 00:56
3Sum, 依然是排序之后最里层的二分,而且这次不需要原index因此更简单些。
vector<vector<int> > threeSum(vector<int> &num) {vector<vector<int>> tuplesets;if(num.size()<=2)return tuplesets;sort(num.begin(),num.end()); int repeatedi=num.at(0),repeatedj=num.at(1); for(int i=0;i<num.size();i++){if(i!=0&&num.at(i)==repeatedi)continue;repeatedi=num.at(i);for(int j=i+1;j<num.size();j++){if(j!=1&&num.at(j)==repeatedj)continue;repeatedj=num.at(j);int query=0-num.at(i)-num.at(j);int low=j+1,high=num.size()-1;while(low<=high){int mid=(low+high)/2;if(num.at(mid)<query)low=mid+1;else if(query<num.at(mid))high=mid-1;else{vector<int> vec;vec.push_back(num.at(i));vec.push_back(num.at(j));vec.push_back(num.at(mid));tuplesets.push_back(vec);break;}}}}return tuplesets; }
这个代码在写的时候,出现几种问题,二分找到的case里没有返回,在这里就是break出来,因为操作在里面完成。二分有两种出口,一种是找不到,low>high,一种是找到,所以尤其是嵌入其他的代码里时,特别要想清楚出口怎么设计。
而且包括fawks大神在内都提醒过我,用的变量在用的时候直接定义赋值,不要离得那么远,不要考虑每次循环申请那么多变量的问题(尽管我一直这么担心的)
然后里面还有判unique的部分,我想想发现只要外两层循环跳过重复的变量就可以保证不漏掉,也不会重复,大家可以想想为什么,昨天想了下是这样的。另外发现设置repeated元素时发现第一次loop会出现问题,因此设置大神设置firstflag,多次经验表明变量越多越可能出bug,因此尽量少变量,其实用i=0 j=0就可以了,我之前就喜欢设计一些奇奇怪怪的bool变量做flag = =
0 0
- Two Sum && 3 Sum
- 【Leetcode】3Sum (Sum)
- 3Sum 3Sum Closest 4Sum
- 3Sum & 3Sum Closest & 4Sum
- 3sum、3Sum closet、 4sum
- 3Sum, 3Sum Closest, 4 Sum
- leetcode 2 sum 3sum 4sum
- 2Sum 3Sum 4Sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- 3Sum
- 3SUM
- 3-sum
- 3Sum
- 3Sum
- 3Sum
- 3Sum
- 类的设计和实现(C++Primer 习题12.13的思考)
- 《linux wait与waitpid函数的深入分析》
- .NET程序内存分析工具CLRProfiler的使用(性能测试)
- 可信计算系列之一——ATMEL的TPM芯片AT97SC3204T及TSS栈
- Android百度 V3.0 缩放比例和定位按钮功能设置
- 3Sum
- NetMap中选择要素
- PermGen space错误解决方法
- unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger)
- 谈一谈汽车安全气囊控制系统故障的主要原因是什么
- linux apache 新建两个虚拟目录
- 虚函数练习:动物2
- 开博第一帖
- linux下常用命令使用