LeetCode15:3Sum
来源:互联网 发布:邻家女孩服饰淘宝网 编辑:程序博客网 时间:2024/06/05 19:48
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)
这道题可以用求两个数的和相同的解法来求解。需要注意的是对重复元素的处理,如果不加上这个减枝处理,在leetcode中会显示超时。
首先对数组进行排序,时间复杂度是O(Nlog(N))。
然后定义三个指针,第一个指针从头遍历到尾,第二个指针和第三个指针和求两个数的和时的那两个指针一样从两端开始遍历,左端由第一个指针来确定。这样时间复杂度是O(N^2)。总的时间复杂度是O(N^2)。一定要加上对重复元素的减枝处理。
runtime:68ms
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int length=nums.size(); vector<vector<int>> result; if(length<3) return result; sort(nums.begin(),nums.end()); auto iter1=nums.begin(); for(;iter1!=nums.end()-2;iter1++) { auto iter2=iter1+1; auto iter3=nums.end()-1; while(iter2<iter3) { if(*iter1+*iter2+*iter3==0) { vector<int> tmp; tmp.push_back(*iter1); tmp.push_back(*iter2); tmp.push_back(*iter3); result.push_back(tmp); while(*iter2==*(iter2+1)&&(iter2+1)<iter3) iter2++; while(*iter3==*(iter3-1)&&iter2<(iter3-1)) iter3--; iter2++; } else if(*iter1+*iter2+*iter3<0) { while(*iter2==*(iter2+1)&&(iter2+1)<iter3) iter2++; iter2++; } else { while(*iter3==*(iter3-1)&&iter2<(iter3-1)) iter3--; iter3--; } } while(*iter1==*(iter1+1)&&(iter1+1)<nums.end()-2) iter1++; } return result; }};
0 0
- LeetCode15: 3 Sum
- LeetCode15:3Sum
- leetcode15 3Sum
- leetcode15 3Sum
- LeetCode15:3Sum
- leetcode15 3sum
- [LeetCode15]3Sum
- leetcode15---3Sum
- leetcode15.3Sum
- leetcode15:3Sum
- leetcode15:3Sum
- Leetcode15. 3Sum
- leetcode15. 3Sum
- leetcode15~3Sum
- leetcode15. 3Sum
- leetcode15. 3Sum
- LeetCode15. 3Sum
- leetcode15: 3Sum
- 切换图片、fragment;可以控制循环、时间,添加下标及下标设置,fragment 添加标题及标题设置
- 【protobuf】 1.生成C++代码
- linux 安装svn,并设置钩子来同步更新
- Android Activity或者是对话框等设置透明和半透明
- SQLServer存储过程返回值总结2333
- LeetCode15:3Sum
- qt界面自动放大缩小【转】
- #ifdef和#if defined的差别以及复杂判断
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- Linux的 iptables详解
- Android程序员自己动手制作.9.png图片
- Webservice(实践)——入门实例
- 关于H.264概述
- USB Type-C,接口上的大统一