给定一个包含 n 个整数的数组 nums
和一个目标值 target
,判断 nums
中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target
相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]
/**
* Created by PhpStorm.
* User: taov5
* Date: 2019/3/20
* Time: 3:37 PM
*/
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer[][]
*/
function fourSum($nums, $target) {
sort($nums);
$len = count($nums);
$res = [];
for ($i = 0;$i<$len-3;$i++){
for ($j=$i+1;$j<$len-2;$j++){
$l=$j+1;
$r=$len-1;
while ($l<$r){
$sum = $nums[$i]+$nums[$j]+$nums[$l]+$nums[$r];
if($sum===$target && $r>$l){
$tmp = [$nums[$i],$nums[$j],$nums[$l],$nums[$r]];
$res[]=$tmp;
while ($l<$r&&$nums[$r]===$nums[$r-1]){
$r--;
}
while ($l<$r&&$nums[$l]===$nums[$l+1]){
$l++;
}
$r--;
$l++;
}else{
if($sum>$target){
$r--;
}else{
$l++;
}
}
}
}
}
return array_unique($res,SORT_REGULAR);
}
print_r(fourSum([0,0,0,0],0));