给n个数, 找出三个数相加结果为0的所有的组, 不可重复。
用双指针的思想,O(n^2)暴力的找, 注意判重复。
1 class Solution { 2 public: 3 vector<vector<int>> threeSum(vector<int>& nums) { 4 int sz = nums.size(); 5 vector <vector<int> > ans; 6 vector <int> tmp; 7 sort(nums.begin(), nums.end()); 8 for(int i = 0; i<sz; i++) { 9 if(i>0 && nums[i] == nums[i-1]) 10 continue; 11 int l = i+1, r = sz-1; 12 while(l<r) { 13 int sum = nums[i]+nums[l]+nums[r]; 14 if(sum < 0) { 15 l++; 16 } else if (sum>0) { 17 r--; 18 } else { 19 tmp.push_back(nums[i]); 20 tmp.push_back(nums[l++]); 21 tmp.push_back(nums[r--]); 22 sort(tmp.begin(), tmp.end()); 23 ans.push_back(tmp); 24 tmp.clear(); 25 while(l<r&&nums[l-1]==nums[l]) 26 l++; 27 while(r>l&&nums[r] == nums[r+1]) 28 r--; 29 } 30 } 31 } 32 return ans; 33 } 34 };