leetcode 15. 3Sum 双指针

题目链接

给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 };
原文地址:https://www.cnblogs.com/yohaha/p/5121813.html