思路: 使用hash table降低循环的层数, 先计算前两个数组中两个元素的和,并用数组记录值与出现次数,再处理后两个数组。
function fourSumCount($nums1, $nums2, $nums3, $nums4) {
$_sumCount = [];
foreach ($nums1 as $num1) {
foreach ($nums2 as $num2) {
$_sum = $num1 + $num2;
if (isset($_sumCount[$_sum])) {
$_sumCount[$_sum]++;
} else {
$_sumCount[$_sum] = 1;
}
}
}
$_total = 0;
foreach ($nums3 as $num3) {
foreach($nums4 as $num4) {
$_sum = -$num3 - $num4;
if (array_key_exists($_sum, $_sumCount)) {
$_total += $_sumCount[$_sum];
}
}
}
return $_total;
}