zoukankan      html  css  js  c++  java
  • [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 };
  • 相关阅读:
    周进度报告六
    周进度报告五
    周进度报告四
    周进度报告三
    周进度报告二
    25.锁_2
    24.join算法/锁_1
    23.Secondary Index
    22.doublewrite/ChangeBuffer/AHI/FNP
    21.Buffer Pool与压缩页/CheckPoint/LSN
  • 原文地址:https://www.cnblogs.com/lca1826/p/6367689.html
Copyright © 2011-2022 走看看