zoukankan      html  css  js  c++  java
  • Leetcode 15. Sum(二分或者暴力或者哈希都可以)

    15. 3Sum
    Medium

    Given an array nums of n integers, are there elements abc in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

    Note:

    The solution set must not contain duplicate triplets.

    Example:

    Given array nums = [-1, 0, 1, 2, -1, -4],
    
    A solution set is:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]

    题解: 三个数的和,思路就是求任意两个数的和x,然后O(n^2),再用O(1)的搜索搜索-x是否再数组内就可以了,O(1)搜索用哈希就行,或者用O(longn)的二分的方法也可以接收,我用的自带的find函数,最后也过了
     1 class Solution {
     2 public:
     3     vector<vector<int>> threeSum(vector<int>& nums) {
     4         multiset<int> left;
     5         multiset<int> right;
     6         set<vector<int>> ans;
     7         int fl = 0;
     8         for(int i = 0;i < nums.size(); i++){
     9             if(nums[i] == 0) fl++;
    10             else if(nums[i]<0) left.insert(nums[i]);
    11             else if(nums[i]>0) right.insert(nums[i]);
    12         }
    13         set<int>:: iterator lit;
    14         set<int>:: iterator rit;
    15         for(lit = left.begin(); lit!=left.end(); lit++){
    16             rit = lit;
    17             rit++;
    18             for(; rit != left.end(); rit++){
    19                 int tt = (*lit)+(*rit);
    20                 if(right.find(-tt)!=right.end()){
    21                     vector<int> New;
    22                     New.push_back( (*lit));New.push_back( (*rit));New.push_back( -tt);
    23                     ans.insert(New);
    24                 }
    25             }
    26         }
    27         for(rit = right.begin(); rit!=right.end(); rit++){
    28             lit = rit;
    29             lit++;
    30             for(; lit != right.end(); lit++){
    31                 int tt = (*lit)+(*rit);
    32                 if(left.find(-tt)!=left.end()){
    33                     vector<int> New;
    34                     New.push_back( -tt);New.push_back( (*rit));New.push_back( (*lit));
    35                     ans.insert(New);
    36                 }
    37             }
    38         }
    39         if(fl>=1){
    40             set<int>:: iterator it;
    41             for(it = left.begin(); it!=left.end(); it++){
    42                 if(right.find(-(*it))!=right.end()){
    43                     vector<int> New;
    44                     New.push_back((*it));New.push_back(0);New.push_back(-(*it));
    45                     ans.insert(New);
    46                 }
    47             }
    48         }
    49         if(fl>=3){
    50             vector<int> New;
    51             New.push_back(0);New.push_back(0);New.push_back(0);
    52             ans.insert(New);
    53         }
    54         vector<vector<int>> finalans;
    55         set<vector<int>>:: iterator i;
    56         for(i = ans.begin(); i!=ans.end(); i++){
    57             vector<int> t = (*i);
    58             finalans.push_back(t);
    59         }
    60         return finalans;
    61     }
    62 };
  • 相关阅读:
    MySQL具体解释(19)----------海量数据分页查询优化
    初试 Windows XP Embedded 系统开发1
    四元数(Quaternion)和旋转
    Qt动画效果的实现,QPropertyAnimation
    <QtEndian>
    QString,QByteArray和QBitArray之间的转换
    memmove和memcpy
    QStyle
    QStyle 新风格的实现
    实时操作系统
  • 原文地址:https://www.cnblogs.com/shanyr/p/11443412.html
Copyright © 2011-2022 走看看