Leetcode--3Sum
来源:互联网 发布:js 获取对象属性 编辑:程序博客网 时间:2024/05/18 18:19
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
- Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
- The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4}, A solution set is: (-1, 0, 1) (-1, -1, 2)
Solution 1:
固定一个数,然后求解两个数的和等于target(0)
值得一提的是,set容器解决重复数问题很方便
class Solution {public:#define MAX(a,b,c) (a>b?a:b)>c?(a>b?a:b):c#define MIN(a,b,c) (a<b?a:b)<c?(a<b?a:b):c vector<vector<int> > threeSum(vector<int> &num) { multimap<int,int> m;set<vector<int>> mres; for(int i=0;i<num.size();i++) m.insert(pair<int,int>(num[i],i+1)); multimap<int,int>::iterator it1; multimap<int,int>::iterator it2; multimap<int,int>::iterator it3; for(it1=m.begin();it1!=m.end();it1++) { //it2=it1,it2++; for(it2=it1,it2++;it2!=m.end();it2++) { if((it3=m.find(0-it1->first-it2->first))!=m.end()&&it3!=it2&&it3!=it1) { vector<int>temp; int mi=MIN(it1->first,it2->first,it3->first); int ma=MAX(it1->first,it2->first,it3->first); temp.push_back(mi); temp.push_back(0-mi-ma); temp.push_back(ma);mres.insert(temp); } } }/*set<vector<int>>::iterator sit=mres.begin();while(sit!=mres.begin()){res.push_back(*sit);sit++;}*/vector<vector<int>>res(mres.begin(),mres.end()); return res; }};
时间复杂度为O(n^2logn)
结果
Submission Result: Time Limit Exceeded
还需优化
class Solution {public: vector<vector<int> > threeSum(vector<int> &num) { vector<vector<int>> res; if(num.size()<3) return res; sort(num.begin(),num.end()); for(int i=0;i<num.size();i++) { if(i>0&&num[i]==num[i-1]) continue; int a=num[i]; int l=i+1; int r=num.size()-1; while(l<r) { if(l>i+1&&num[l]==num[l-1]){ l++; continue; } if(r<num.size()-1&&num[r]==num[r+1]) { r--; continue; } if(num[l]+num[r]+a<0) l++; else if(num[l]+num[r]+a>0) r--; else { vector<int>tmp; tmp.push_back(num[i]); tmp.push_back(num[l]); tmp.push_back(num[r]); res.push_back(tmp); l++; } } } return res; }};
0 0
- 【Leetcode】3Sum (Sum)
- Leetcode:2Sum,3Sum
- 【Leetcode】3Sum Closest (Sum)
- leetcode 2 sum 3sum 4sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- [LeetCode] 2Sum, 3Sum, 4Sum, 3SUm closet
- [LeetCode] K sum(2Sum、3Sum、4Sum)
- leetcode--sum集合:2sum,3sum,4sum
- leetcode --- 2 sum , 3 sum , 4 sum , k sum problem
- LeetCode: 3Sum
- LeetCode: 3 Sum Closest
- leetcode - 3 Sum
- leetcode - 3 sum closest
- leetcode 3Sum
- leetcode 3Sum Closest
- LeetCode: 3Sum
- "synchronized" 的四种基本用法
- Spring的servlet context和application context
- 20141007个人日志(顺序统计量)
- Lua中table的遍历
- C. Robot(BFS)
- Leetcode--3Sum
- 二进制与十六进制
- C语言_链表
- 内核自动分配端口号范围
- Could not load the Tomcat server configuration at /Servers/Tomcat v7.0 Server at localhost-config.
- 【代码实现】PHP生成各种随机验证码
- 在字符串中找出连续最长的数字串 ——来自华为OJ平台测试基础篇
- linux驱动---DMA操作---寄存器分析
- 关于无法打开包含文件:“fstream.h” 的问题