算法

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;
    }
 

 

posted @ 2019-12-24 17:29  未解  阅读(156)  评论(0编辑  收藏  举报