首页 > 其他 > 详细

LintCode "4 Sum"

时间:2015-10-24 10:01:54      阅读:174      评论:0      收藏:0      [点我收藏+]

4 Pointer solution. Key: when moving pointers, we skip duplicated ones.

Ref: https://github.com/xbz/lintcode/blob/master/4_sum/4sum.cpp

技术分享
class Solution {
    void nextUnique(vector<int> &num, size_t &j)
    {
        while (j<num.size() && num[j]==num[j-1]) ++j;
    }
public:
    vector<vector<int> > fourSum(vector<int> &num, int target) 
    {
        vector<vector<int> > ret;
        sort(num.begin(), num.end());
        
        for (size_t i=0; i<num.size(); ++i) 
        {
            if(i > 0) nextUnique(num, i);

            for (size_t j=i+1; j<num.size(); ++j) 
            {
                if(j>i + 1) nextUnique(num, j);

                size_t m = j + 1;
                size_t n = num.size() - 1;
                while (m < n) {
                    int sum = num[i] + num[j] + num[m] + num[n];
                    if (sum == target) 
                    {
                        vector<int> v = {num[i], num[j], num[m], num[n]};
                        ret.push_back(v);
                        m++;
                        n--;

                        if(m>j+1) nextUnique(num, m);
                        while (n<num.size()-1 && m<n && num[n]==num[n+1]) n--;
                    } else if (sum < target)
                        ++m;
                    else
                        --n;
                }
            }
        }
        return ret;
    }
};
View Code

 

LintCode "4 Sum"

原文:http://www.cnblogs.com/tonix/p/4906190.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!