• 3Sum


    Given an array S of n integers, are there elements abc 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)
    

    这题做得真是郁闷。。。。

    C++实现代码:

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    class Solution
    {
    public:
        vector<vector<int> > threeSum(vector<int> &num)
        {
            if(num.empty())
                return vector<vector<int> >();
            sort(num.begin(),num.end());
            vector<vector<int> > ret;
            int n=num.size();
            int i;
            for(i=0; i<n-2; i++)
            {
                //只保留第一个不重复的,其余的都删了
                if(i>=1&&num[i]==num[i-1])
                    continue;
                int target=-num[i];
                int left=i+1;
                int right=n-1;
                vector<int> tmp;
                while(left<right)
                {
                    //删除重复元素
                    if(right>left&&right<n-1&&num[right+1]==num[right])
                        right--;
                    else if(num[left]+num[right]==target)
                    {
                        tmp={num[i],num[left],num[right]};
                        ret.push_back(tmp);
                        left++;
                        right--;
                    }
                    else if(num[left]+num[right]<target)
                        left++;
                    else if(num[left]+num[right]>target)
                        right--;
                }
            }
            return ret;
        }
    };
    int main()
    {
        vector<int> vec= {-2,0,1,1,1,1,1,2};
        Solution s;
        vector<vector<int> > result=s.threeSum(vec);
        for(auto a:result)
        {
            for(auto v:a)
                cout<<v<<" ";
            cout<<endl;
        }
        cout<<endl;
    }
     
  • 相关阅读:
    vue 中简单路由的实现
    Vue中对生命周期的理解
    内存泄漏
    前端工程化
    exports 和 module.exports 的区别
    Nodejs的url模块方法
    MongoDB 的获取和安装
    Anjular JS 的一些运用
    移动端vconsole调试
    安装fiddler时,电脑浏览器没网
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4120570.html
Copyright © 2020-2023  润新知