[Leetcode] 15.3Sum

来源:互联网 发布:coach淘宝代购 编辑:程序博客网 时间:2024/06/05 10:40

本题可转化成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                 // 由两侧向中间查找target17                 if (sum < target)18                     front++;19                 else if (sum > target)20                     back--;21                 else22                 {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 };