Leetcode基础刷题之PHP解析(18. 4Sum)

栏目: PHP · 发布时间: 6年前

内容简介:2019-6-26 星期三 开始吧

2019-6-26 星期三 开始吧

Leetcode基础刷题之 PHP 解析(16. 3Sum Closest)

Leetcode基础刷题之PHP解析(18. 4Sum)

给定一个数组,求出四个数加起来等于给定目标值值的全部组合,当然还是不能有重复的组合。

不得不佩服这些出题的人,leetcode每一个题目都会有千变万化的题型。这道题我们需要先化简,把四个数相加等于目标值换成两个数相加等于目标值,这则么化?其实道理小学的时候就学过。比如说我要算10+20+30+40==100?(不好意思我口算不出来),100就是我们的目标数。可以先转换成100-10-20产生一个新的目标数,剩下的工作就是30+40 ?=70?整体的思路就是这样。

但是这个过程我们 处理很多信息,第一给定的数组是无序的,我们先转为有序,相加的过程中一个向左边移动一个向右边移动(左小右大),直到左右相遇,一但发现sum值加起来大于目标数,那么说明右边给的值太大了,往左边移动。反之左边的往右边移动。如果相等说明这是其中的一组解,把这组解push到最终返回的数组里面。另外一点就是要求不能重复,如果下一个位置的值和上一位置的值是相等的,那么直接跳过去。

  /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[][]
     */
    function fourSum($nums, $target) {
        $result=[];
        if(count($nums)<4) return $result;
        sort($nums);
        $count=count($nums);
        for($i=0;$i<$count-3;$i++){
            if($i==0 || $nums[$i] !== $nums[$i-1]){
                for($j=$i+1;$j<$count-2;$j++){
                    if($j==$i+1 || $nums[$j] !== $nums[$j-1]){
                        $newTarget=$target-$nums[$i]-$nums[$j];
                        $start=$j+1;
                        $end=$count-1;
                        while($start<$end){
                         if($nums[$start]+$nums[$end]==$newTarget){
                            $result[]=[$nums[$i],$nums[$j],$nums[$start],$nums[$end]];
                            while($start<$end && $nums[$start]==$nums[$start+1]) $start++;
                            $start++;
                            while($start<$end && $nums[$end]==$nums[$end-1]) $end--;
                            $end--;
                        }else if($nums[$start]+$nums[$end]>$newTarget){
                            $end--;
                        } else $start++;
                             
                    }
                       
                 }
              }
            }
        }
        return $result;
    }

Github整理地址 : https://github.com/wuqinqiang/leetcode-php


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Definitive Guide to MongoDB

The Definitive Guide to MongoDB

Peter Membrey、Wouter Thielen / Apress / 2010-08-26 / USD 44.99

MongoDB, a cross-platform NoSQL database, is the fastest-growing new database in the world. MongoDB provides a rich document orientated structure with dynamic queries that you’ll recognize from RDMBS ......一起来看看 《The Definitive Guide to MongoDB》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具