1.两数之和变形版 头尾固定 mid从第二个元素开始 如果三数之和大于目标 尾-- 如果小于mid++ 如果mid==end-1了 就head++ mid还是从head+1起 深搜也可以
private function _3Sum($arr, $sum)
{
sort($arr);
$head = 0;
$mid = 1;
$end = count($arr) - 1;
while ($head < $end) {
if ($arr[$head] + $arr[$end] + $arr[$mid] == $sum) {
$res[] = [$arr[$head], $arr[$mid],$arr[$end]];
$head++;
$mid = $head+1;
}else if($arr[$head] + $arr[$end]+ $arr[$mid] > $sum){
$end--;
}else{
if($mid == $end-1 ){
$head++;
$mid = $head+1;
}else{
$mid ++;
}
}
}
echo '<pre>';
print_r($res);
}