leetcode-15 3Sum
来源:互联网 发布:软件管理下载安装 编辑:程序博客网 时间:2024/06/10 05:56
a+b+c=0可以看做a+b=-c。利用twoSum的方法。
class Solution {public://想法是,首先采用快排进行排序,//然后利用twoSum的方法,将-c当做target即可。 void quick_sort( vector<int> &s, int left, int right)//快排,首先排序 { if(left < right) { swap(s[left], s[(left + right)/2]);//将第一个数与中间的数交换,尽量取得中位数 int i= left, j= right; vector<int> x{ s[i] }; while( i < j) { while( x[0] <= s[j] && i < j)// 找到最右边第一个小于X的数 --j; if( i < j) s[i++] = s[j]; while( x[0] > s[i] && i < j)//找到最左边第一个大于X的数 ++i; if(i < j) s[j--] = s[i]; } s[i] = x[0]; quick_sort( s, left, i-1); //递归调用快排,排前半段 quick_sort( s, i+1, right); //递归调用快排,排后半段 } } //twoSum() void twoSum( vector<int> &temp, vector<vector<int> > &solu, int targetDex) { int i= targetDex + 1, j = temp.size()-1; //vector<int> v; while( i < j) { if(temp[targetDex] + temp[i] + temp[j] > 0) --j; else if(temp[targetDex] + temp[i] + temp[j] < 0) ++i; else { vector<int> v; v.push_back(temp[targetDex]); v.push_back(temp[i]); v.push_back(temp[j]); solu.push_back(v); ++i; --j; while(i < temp.size() && temp[i]==temp[i - 1]) i++; while(j >= 0 && temp[j] == temp[j + 1]) j--; } } } vector<vector<int> > threeSum(vector<int> &num) { vector<vector<int> > solution; int countS=0; int left = 0, right = num.size() - 1; quick_sort( num , left, right);//快排 //利用two sum 的办法,将a+b+c = 0 看做 a+b = -c, for(int i=0; i < num.size(); ++i) { if( i > 0 && num[i] == num[i-1] || num[i] > 0) continue; twoSum( num, solution, i); } return solution; }};
0 0
- Leetcode 15 3Sum
- LeetCode 15: 3Sum
- leetcode 15 3Sum
- [leetcode 15] 3Sum
- Leetcode【15】:3Sum
- [leetcode 15] 3Sum
- [Leetcode] 15 - 3Sum
- leetcode.15-----------3Sum
- leetcode 15 3Sum
- leetcode-15 3Sum
- 3Sum - LeetCode 15
- Leetcode #15 3 Sum
- LeetCode---(15) 3 sum
- LeetCode 15 - 3Sum
- leetcode-15 3sum
- leetcode 15 -- 3Sum
- Leetcode[15]-3Sum
- LeetCode 15: 3 Sum
- windows下androidNDK环境配置
- c++计时器
- C++常用的预处理指令:
- LeetCode-15 3Sum(求3数和为零的情况总数)
- android setVisibility三种状态值的解释
- leetcode-15 3Sum
- leetcode第88题-Merge Sorted Array
- rtcm 报文
- 哈希算法学习
- Mac技巧
- Linux下端口被占用解决
- 以MyBatis+SpringMVC3.0实现的,借鉴了Hibernate设计思想,采用封装、抽象、继承的设计思想,做到了数据与相应的操作的高内聚低耦合的实现
- 作业3.24
- Javascript的常用语句