Leetcode 3-sum

题目描述

给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。

注意:

  1. 三元组(a、b、c、d)中的元素必须按非降序排列。(即a≤b≤c)
  2. 解集中不能包含重复的三元组。
    例如,给定的数组 S = {-1 0 1 2 -1 -4},↵↵    解集为:↵    (-1, 0, 1)↵    (-1, -1, 2)

 

基本思路:

对数组进行排序;

按照第一个数字进行讨论(i从0到 n-2)

其余的第二大,第三大数字分别从  j=i+1   r=n-1  开始从两端向中间靠拢

若num[i]+num[j]+num[r]==0符合要求  若<0  那么j++  若>0  那么r--

关键点:跳过重复的数字

 

vector > threeSum(vector &num) {
        
        vector> res;
        int L=num.size();
        if(L<3)
            return res;
        sort(num.begin(),num.end());  //先排序
        for(int i=0;i0) 
                break;
            if(i>0 && num[i]==num[i-1])  //跳过重复项
                continue;
            
            
            int j=i+1;  //第二大数字
            int r=L-1;  //第三大数字
            while(j one_res;
                    one_res.push_back(num[i]);
                    one_res.push_back(num[j]);
                    one_res.push_back(num[r]);
                    res.push_back(one_res);  //符合要求
                    //跳过重复的数字
                    while(j

 

 

你可能感兴趣的:(Leetcode)