zoukankan      html  css  js  c++  java
  • LeetCode "3Sum"

    Now that you've solved 2sum, 3sum can be easily converted as 2sum.

    Also please note the while loops for i1 and i2: they are to make sure no duplicates.

    class Solution {
    public:
        vector<vector<int> > threeSum(vector<int> &num) {
            vector<vector<int> > ret;
            if (num.size() < 3) return ret;
    
            std::sort(num.begin(), num.end());
    
            for (int i0 = 0; i0 < num.size() - 2; i0++)
            {
                if (i0 > 0 && num[i0] == num[i0 - 1]) continue;
    
                int tgt = -num[i0];
                int i1 = i0 + 1, i2 = num.size() - 1;
    
                while (i1 < i2)
                {
                    int curr = num[i1] + num[i2];
                    if (curr == tgt)
                    {
                        vector<int> rt;
                        rt.push_back(num[i0]);
                        rt.push_back(num[i1]);
                        rt.push_back(num[i2]);
                        ret.push_back(rt);
                        while (++i1, num[i1] == num[i1-1]);
                    }
                    else if (curr < tgt)
                    {
                        while (++i1, num[i1] == num[i1-1]);
                    }
                    else if (curr > tgt)
                    {
                        while (--i2, num[i2] == num[i2 + 1]);
                    }
                }
            }
    
            return ret;
        }
    };
  • 相关阅读:
    vant 移动helloworld
    ts
    study vant
    uniapp 上传图片
    electron
    1
    测试vue模板
    [Java] Spring_1700_Spring_DataSource
    [Java] Spring_1600_AOP_XML
    [Java] Spring_1500_AOP_Annotation
  • 原文地址:https://www.cnblogs.com/tonix/p/3918887.html
Copyright © 2011-2022 走看看