【leetcode】3Sum
1,772 views
0
Question:
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)
Anwser 1:
class Solution { public: vector<vector<int> > threeSum(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function vector< vector<int> > ret; int len = num.size(); if(len < 3) return ret; vector<int> num2; num2.assign(num.begin(), num.end()); sort( num2.begin(), num2.end() ); // sort O(n*log(n)) vector<int> tmpRet(3); tmpRet[0] = num2[0] - 1; for(int i = 0; i < len - 2; i++){ // O(n*m) int l = i + 1; int r = len - 1; if(num2[i] == tmpRet[0]) continue; tmpRet[0] = num2[i]; while(l < r) { int sum2 = num2[l] + num2[r]; if(num2[i] + sum2 == 0){ tmpRet[1] = num2[l]; tmpRet[2] = num2[r]; ret.push_back(tmpRet); while(num2[++l] == num2[l-1] && l < r); // remove same number while(num2[--r] == num2[r+1] && l < r); } else if(num2[i] + sum2 < 0){ l++; } else { r--; } } } return ret; } };
原文: 【leetcode】3Sum
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2021-01-07 11:39:10
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: 【leetcode】3Sum (米扑博客)