zoukankan      html  css  js  c++  java
  • leetcode 3Sum

    下面这个是笨方法。

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<vector>
     4 
     5 using namespace std;
     6 
     7 vector<vector<int> > threeSum(vector<int> &num) {
     8     sort(num.begin(), num.end());
     9     vector<vector<int>> result;
    10     int L = num.size();
    11     for (int i = 0; i < L-2; i++)
    12     {
    13         if (i != 0&& num[i] == num[i - 1])
    14         {
    15             continue;
    16         }
    17         for (int j = i+1; j < L-1; j++)
    18         {
    19             int OK = 0;
    20             int left = j + 1;
    21             int right = L - 1;
    22             while (left <= right)
    23             {
    24                 int middle = (left + right) / 2;
    25                 int key = 0 - num[i] - num[j];
    26                 if (num[middle] == key)
    27                 {
    28                     vector<int> newV;
    29                     newV.push_back(num[i]);
    30                     newV.push_back(num[j]);
    31                     newV.push_back(num[middle]);
    32                     if (result.size() > 0)
    33                     {
    34                         if (result[result.size() - 1][0] == newV[0] && result[result.size() - 1][1] == newV[1])
    35                         {
    36                             break;
    37                         }
    38                     }
    39                     result.push_back(newV);
    40                     OK = 1;
    41                     break;
    42                 }
    43                 if (OK == 1)
    44                 {
    45                     continue;
    46                 }
    47                 else
    48                 {
    49                     if (key < num[middle])
    50                     {
    51                         right = middle-1;
    52                     }
    53                     else
    54                     {
    55                         left = middle + 1;
    56                     }
    57                 }
    58             }
    59         }
    60     }
    61     return result;
    62 }
    63 
    64 
    65 
    66 int main()
    67 {
    68     vector<int> S = { -1, 0, 1 ,2, -1, -4, - 1, };
    69     threeSum(S);
    70     return 0;
    71 }

    聪明的方法:

  • 相关阅读:
    Atcoder Grand Contest 038 F
    洛谷 P5502
    Codeforces 1010F
    洛谷 P4621
    洛谷 P5518
    Oracle-切换当用用户的模式
    Oracle-DBV数据文件校验工具
    【转载】Oracle-通过增量备份前滚的反手解决物理备库归档缺失,损坏,gap问题
    Oracle-对比SAA与STA
    Oracle-SAA
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4425986.html
Copyright © 2011-2022 走看看