1.题目描述

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

 

Note:

 

Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ? b ? c)

The solution set must not contain duplicate triplets.

    For example, given array S = {-1 0 1 2 -1 -4},

 

    A solution set is:

    (-1, 0, 1)

    (-1, -1, 2)

2.解法分析

之前做过3sum closest的题目,很显然,那里的思路应用到这里是绝对可行的, 但是这个题目我觉得可以用hashmap来做,结果就写了个基于hash的程序,可是结果总是差点,检查了好半天没检查出来,先记录一下

class Solution {

public:

 

    vector<vector<int> > threeSum(vector<int> &num) {

        // Start typing your C/C++ solution below

        // DO NOT write int main() function

        vector<vector<int> > result;

        int numSize=num.size();

        if(numSize<2)return result;

        

        sort(num.begin(),num.end());

        unordered_multiset<int> myHash;

        

        for(int i =0;i<num.size();++i)

        {

            myHash.insert(num[i]);

        }

        

        int thirdNum=0;

        vector<int>cur;

        cur.assign(3,1);

        

        for(int i=0;i<num.size()-2;++i)

        {

            if(i>0&&num[i-1]==num[i])break;

            if(num[i]>0)break;

            

            if(num[i]!=num[i+1]&&myHash.count(num[i])>0)myHash.erase(num[i]);

            for(int j=i+1;j<num.size()-1;++j)

            {

                thirdNum=0-num[i]-num[j];

                if(thirdNum<num[j])break; 

                if(num[j+1]!=num[j])myHash.erase(num[j]);

                if(myHash.count(thirdNum)>0)

                {

                    if(cur[0]!=num[i]||cur[1]!=num[j]||cur[2]!=thirdNum)

                    {

                        cur[0]=num[i];cur[1]=num[j];cur[2]=thirdNum;

                        result.push_back(cur);

                    }      

                }

              

            }

        }

        

        

        return result;

    }

    

 

};

leetcode—3sum的更多相关文章

  1. [LeetCode] 3Sum Smaller 三数之和较小值

    Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 < ...

  2. [LeetCode] 3Sum Closest 最近三数之和

    Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...

  3. [LeetCode] 3Sum 三数之和

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  4. LeetCode 3Sum Smaller

    原题链接在这里:https://leetcode.com/problems/3sum-smaller/ 题目: Given an array of n integers nums and a targ ...

  5. leetcode — 3sum

    import java.util.*; /** * Source : https://oj.leetcode.com/problems/3sum/ * * Created by lverpeng on ...

  6. LeetCode: 3Sum

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  7. LeetCode:3Sum, 3Sum Closest, 4Sum

    3Sum Closest Given an array S of n integers, find three integers in S such that the sum is closest t ...

  8. Leetcode 3Sum Closest

    Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...

  9. Leetcode 3Sum Closet

    二手和3Sum像几乎相同的想法.二进制搜索.关键修剪.但是,在修剪做出很多错误. 然后还有一个更加速了原来的想法O(n^2). #include<iostream> #include &l ...

随机推荐

  1. 专家谈国产CPU最新发展态势:需强化标准建设(很全面)

    一.国产CPU发展现状与成就 国内已开启多技术路线并行的CPU技术产业新格局.在国家科技重大专项和国家级集成电路产业投资资金的推动之下,我国CPU产品技术研发已进入多技术路线同步推进的高速发展阶段,并 ...

  2. 给360的六条建议(禁止异地登录,普通用户500G足够用了)

    个人觉得,360云盘哪怕做个小改进,都不至于走到现在的地步,最后六条建议! 1.弄个实名制,身份证和手机号码双重绑定,每人限制申请一个账户. 2.禁止云盘的一切分享功能,采用封闭式,个人云盘资料其他人 ...

  3. iOS 使用COPY声明NSSTRING属性

    使用COPY声明NSSTRING属性 2014/05/29 JACE 发表回复 声明一个NSString属性使用copy要优于使用strong.这同样适用于遵守NSCoding协议的不可变类(immu ...

  4. sonar runner 2.4

    https://www.versioneye.com/java/org.codehaus.sonar.runner:sonar-runner-dist/2.4

  5. redis twitter

    http://redis.io/topics/twitter-clone 翻译:http://my.oschina.net/Twitter/blog/287539

  6. TCP protocol

    he characteristics of TCP protocol TCP (which means Transmission Control Protocol) is one of the mai ...

  7. YCM安装与配置

    1.重新编译vim 2.通过vundle安装YCM 3.安装CMake 4.下载预先编译好的llvm+clang 5.看官网的命令,生成CMake的编译文件并编译 配置YCM: 要额外配置ycm_ex ...

  8. jquery select操作和联动操作

    (function(){ //select操作 $.fn.loadSelect = function(opt){ opt = $.extend({}, { required:false,//为真则添加 ...

  9. inline-block在ie6中的经典bug

    众所周知,给元素设置 inline-block ,可以让ie下的元素出发layout:1. 但是,当给元素设置 inline-block 后,在另外一个class 样式(非设置inline-block ...

  10. Git show-branch显示提交信息

    git中查看日志,我们用的比较多的就是 git log 以及带一些参数,如: 以一行显示提交日志: $ git log --pretty=oneline 显示最后的几次提交日志: $ git log ...