首页 > 代码库 > LeetCode:3Sum
LeetCode:3Sum
题目描述:
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)
思路:对数组排序,然后从左到右遍历数组。对于数组中的每一个元素S[i],要在它后面的所有元素中找两个元素令0=S[i]+S[j]+S[k],即-S[i]=S[j]+S[k],则将3sum问题转化为了2sum问题。可以采用hash的方法求解,也可以采用双指针法求解,我采用的是双指针法。
代码:
vector<vector<int> > Solution::threeSum(vector<int> &num) { int i,j,k; vector<vector<int> > result; int length = num.size(); if(length <= 2) return result; sort(num.begin(),num.end()); for(i = 0;i < length - 2;) { int two_sum = 0 - num[i]; for(j = i+1,k = length-1;j < k;) { if((num[j] + num[k]) < two_sum) j++; else if(two_sum == (num[j] + num[k])) { vector<int> temp(3); temp[0] = num[i]; temp[1] = num[j]; temp[2] = num[k]; result.push_back(temp); do j++; while(j < k && num[j] == num[j-1]); do k--; while(j < k && num[k] == num[k+1]); } else if(two_sum < (num[j] + num[k])) k--; } do i++; while(i < num.size() - 2 && num[i-1] == num[i]); } sort(result.begin(),result.end()); return result; }
LeetCode:3Sum
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。