内容简介:2019-6-26 星期三 开始吧
2019-6-26 星期三 开始吧
上 一 题 链 接 Leetcode基础刷题之 PHP 解析(16. 3Sum Closest)
题 目 描 述
给定一个数组,求出四个数加起来等于给定目标值值的全部组合,当然还是不能有重复的组合。
题 目 分 析
不得不佩服这些出题的人,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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Apache Flink 零基础入门(一):基础概念解析
- Apache Flink 零基础入门(一):基础概念解析
- JStorm 源码解析:基础线程模型
- React Hooks 解析(上):基础
- TypeScript基础入门之模块解析(一)
- TypeScript基础入门之模块解析(二)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数学建模(原书第5版)
[美] Frank R. Giordano、[美] William P.Fox、[美] Steven B.Horton / 叶其孝、姜启源 / 机械工业出版社 / 2014-10-1 / 99.00元
《华章数学译丛:数学建模(原书第5版)》旨在指导学生初步掌握数学建模的思想和方法,共分两大部分:离散建模和连续建模,通过本书的学习,学生将有机会在创造性模型和经验模型的构建、模型分析以及模型研究方面进行实践,增强解决问题的能力。 《华章数学译丛:数学建模(原书第5版)》对于用到的数学知识力求深入浅出,涉及的应用领域相当广泛,适合作为高等院校相关专业的数学建模教材和参考书,也可作为参加国内外数......一起来看看 《数学建模(原书第5版)》 这本书的介绍吧!