[Leetcode] 15.3Sum

本题可转化成2Sum问题,但不同的是需要注意有可能有多值,需要在添加过程中去掉重复的元素。代码如下:

 1 class Solution
 2 {
 3 public:
 4     vector<vector<int> > threeSum(vector<int> &num)
 5     {
 6         vector<vector<int> > res;
 7         sort(num.begin(), num.end());
 8         for (int i = 0; i < num.size(); i++)
 9         {
10             int target = -num[i];
11             int front = i + 1;
12             int back = num.size() - 1;
13             while (front < back)
14             {
15                 int sum = num[front] + num[back];
16                 // 由两侧向中间查找target
17                 if (sum < target)
18                     front++;
19                 else if (sum > target)
20                     back--;
21                 else
22                 {
23                     vector<int> triplet(3, 0);
24                     triplet[0] = num[i];
25                     triplet[1] = num[front];
26                     triplet[2] = num[back];
27                     res.push_back(triplet);
28                     //找到下一个不同的num[front]
29                     while (front < back && num[front] == triplet[1]) front++;
30                     //找到下一个不同的num[back]
31                     while (front < back && num[back] == triplet[2]) back--;
32                 }
33             }
34             //找到下一个不同的num[i]
35             while (i + 1 < num.size() && num[i + 1] == num[i])
36                 i++;
37         }
38         return res;
39     }
40 };
posted @ 2017-02-05 15:09  Strawberry丶  阅读(145)  评论(0编辑  收藏  举报