Leetcode 18. 四数の和


n個の整数を含む配列numsと目標値targetが与えられ、a+b+c+dの値がnumsと等しくなるように、targetに4つの要素a,b,c,dが存在するか否かを判断する.条件を満たし、繰り返さないすべての四元グループを見つけます.
注意:
答えに重複する四元グループを含めてはいけません.
例:
     nums = [1, 0, -1, 0, -2, 2],  target = 0。

           :
[
  [-1,  0, 0, 1],
  [-2, -1, 1, 2],
  [-2,  0, 0, 2]
]

考え方:
まずソートし、次に最小の数をすでに含まれている数として選択し、次元を下げ、2つの数と指定された値が残るまで再帰し、左右にクランプします.
コードは次のとおりです.
class Solution {
public:
    vector> fourSum(vector& nums, int target) {
        qsort(nums.begin(),nums.end());
        return work(nums,0,nums.size(),target,4);
    }
    
    vector> work(vector& nums, int start, int stop, int dst, int count) {
        vector> result;
        if(count == 0 || start>=stop || nums.size() used;
            while(i({nums[i],nums[j]}));
                    used[nums[i]]=1;
                    ++i;
                    --j;
                }else if(sum>dst){
                    --j;
                }else{
                    ++i;
                }
            }
            return result;
        }
        
        map used;
        for(int i=start;i::iterator ia, vector::iterator ib){
        if(ia+1>=ib) return;
        
        auto start=ia,sentinel=ib-1;
        while(start