leetcode15三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

思路:双指针,对每个i确定的值,相当于求两个数的和等于nums[i]的负值,转化为两数之和。开始时两个指针分别为l=i+1和r=size()-1,如果满足nums[i]等于两个指针的量之和,则加入结果。并且判断nums[l+1]等于nums[il,则l++,nums[r]==nums[r-1],则r--;这就是跳过重复的步骤。若两者和不满足,同上进行去重复步骤。

class Solution {
public:
    vector> threeSum(vector& nums) {
        vector> res;
        if(nums.size()<3) return res;
        sort(nums.begin(),nums.end());
        
        for(int i=0;i0&&nums[i]!=nums[i-1]))
            {
                int l=i+1,r=nums.size()-1,sum=0-nums[i];
                while(l v={nums[i],nums[l],nums[r]};
                        res.push_back(v);
                        while(l

下边是超时代码,思路是原数组分成正负数组,则三个数等于,即必有一个负数和两个负数以及全是0三种情况,计算过程也是将三数之和化成两数之和,分别计算并去重复。

class Solution {
public:
    vector> threeSum(vector& nums) {
        vector> res;
        vector fu,zh;
        int n=nums.size();
        int coun=0; //0的个数
        if(n<3) return res;
        //sort(nums.begin(),nums.end());
        for(int i=0;i=3) {
            vector v={0,0,0};
            res.push_back(v);
        }
        map m;
        for(int i=0;i::iterator it=m.find(factor);
                if(it!=m.end() && it->second!=j)
                {
                    vector v={-target,it->first,zh[j]};
                    sort(v.begin(),v.end());
                    res.push_back(v);
                }
                m.insert(pair(zh[j],j));
            }
        }
        //
        m.erase(m.begin(),m.end());
        for(int i=0;i::iterator it=m.find(factor);
                if(it!=m.end() && it->second!=j) {
                    vector v={-target,it->first,fu[j]};
                    sort(v.begin(),v.end());
                    res.push_back(v);
                }
                m.insert(pair(fu[j],j));
            }
        }
        sort(res.begin(),res.end());
        res.erase(unique(res.begin(),res.end()),res.end());
        return res;
    }
};

 

你可能感兴趣的:(算法练习)