算法
1.
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
function threeSum($nums) {
$len = count($nums);
sort($nums);
$n=[];
for($i=0;$i<$len;$i++){
if($nums[$i]>0){
return $n;
}
if($i>0 && ($nums[$i]==$nums[$i-1])){
continue;
}
$l = $i+1;
$r =$len-1;
while ($l<$r) {
if ($nums[$i] + $nums[$l] + $nums[$r] == 0) {
if(!in_array([$nums[$i],$nums[$l],$nums[$r]],$n)){
array_push($n,[$nums[$i],$nums[$l],$nums[$r]]);
}
while ($l< $r && ($l == $l + 1)) {
$l++;
}
while ($l<$r && ($r == $r-1)){
$r--;
}
$l++;
$r--;
}elseif($nums[$i]+$nums[$l]+$nums[$r]>0){
$r--;
}else{
$l++;
}
}
}
return $n;
}
2.
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
示例:
输入: [1,2,3,4]
输出: [24,12,8,6]
function productExceptSelf($nums) {
$len = count($nums);
$res =[];
$j = 1;
for($i=0;$i<$len;$i++){
$res[$i] = $j;
$j = $j*$nums[$i];
}
$j = 1;
for($i=$len-1;$i>=0;$i--){
$res[$i]*= $j;
$j*=$nums[$i];
}
return $res;
}