Leetcode 18. 四数の和
1826 ワード
n個の整数を含む配列
注意:
答えに重複する四元グループを含めてはいけません.
例:
考え方:
まずソートし、次に最小の数をすでに含まれている数として選択し、次元を下げ、2つの数と指定された値が残るまで再帰し、左右にクランプします.
コードは次のとおりです.
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