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)
思路: 固定第一个元素,另外两个元素由sliding window决定。如何去掉重复元素?
1,第一层循环跳过重复的;
2,第二层循环从两头跳过循环的;
时间复杂度O(n^2)
vector< vector<int> > threeSum(vector<int> &num){ int n = num.size(); vector< vector<int> > res; vector<int> cur; sort(num.begin(), num.end()); for(int i = 0; i < n-2; i++){ if(i > 0 && num[i] == num[i-1]) continue; cur.push_back(num[i]); int start = i + 1, end = n - 1; while(start < end){ if(start > i+1 && num[start] == num[start-1]) { start++; continue; } if(end < n-1 && num[end] == num[end+1]){ end--; continue; } int sum = num[i] + num[start] + num[end]; if(sum == 0) { cur.push_back(num[start]); cur.push_back(num[end]); res.push_back(cur); cur.resize(1); start++; end--; } else if(sum > 0) end--; else start++; } cur.pop_back(); } return res; }
No comments:
Post a Comment