Four Sum

本文提供了一种解决四数之和问题的C/C++算法,包括使用排序和双指针技巧来优化查找过程,确保不重复计算相同的结果。
class Solution {
public:
    vector<vector<int> > fourSum(vector<int> &num, int target) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<int> > retVectors;
        if( num.size() < 4 ) 
            return retVectors;
        sort( num.begin() , num.end());
        int size = num.size();
        for( int indx  = 0 ; indx < size ; ++indx )
        {
            if( indx != 0 && num[indx] == num[indx-1] )
            {
                continue;
            }
            for( int indx2 = indx + 1 ; indx2 < size ; ++indx2 )
            {
                if( (indx2 != (indx + 1)) && num[indx2] == num[indx2 - 1] )
                {
                    continue;
                }
                int indx3 = indx2 + 1;
                int indx4 = size - 1;
                while( indx3 < indx4 )
                {
                    int sum = num[indx] + num[indx2] + num[indx3] + num[indx4];
                    if( sum > target )
                    {
                        indx4--;
                    }
                    else if( sum < target )
                    {
                        indx3++;
                    }
                    else if(( indx3 !=( indx2 + 1 )) && num[indx3] == num[indx3-1])
                    {
                        indx3++;
                    }
                    else if( (indx4 != (size - 1)) && num[indx4] == num[indx4+1] )
                    {
                        indx4--;
                    }
                    else
                    {
                        vector<int> res;
                        res.push_back(num[indx]);
                        res.push_back(num[indx2]);
                        res.push_back(num[indx3]);
                        res.push_back(num[indx4]);
                        retVectors.push_back(res);
                        indx3++;
                        indx4--;
                    }
                }
            }
        }
        return retVectors;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值