先看看题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
(1).暴力枚举.我第一次做这道题只能想到这个,文科生有点丢人了。两个大循环,每次循环都用目标值去减去当前值,如果结果的值在这个数组中,并且不是当前值则返回当前值的位置和结果值的位置。
class Solution
{
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer[]
*/
function twoSum($nums, $target)
{
foreach ($nums as $key => $value)
{
$temp = $target - $value;
foreach ($nums as $key2 => $value2)
{
if ($value2 == $temp && $key2 != $key)
{
return [$key, $key2];
}
}
}
}
}(2).哈希表. 建立一个哈希表,key保存每个元素的值,value保存每个元素原来的key.每次循环时判断哈希表是否存在一个(目标值-当前元素)的值,存在则返回当前元素的key和哈希表中的位置。我起初认为这样是不正确的,因为上面要求返回的是[0,1],但是我们这样来做结果是[1,0],不过我看了下letcode的题解,这样也是正确的。
class Solution
{
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer[]
*/
function twoSum($nums, $target)
{
$hash = [];
foreach ($nums as $key => $value)
{
$temp = $target - $value;
if (isset($hash[$temp]))
{
return [$key, $hash[$temp]];
}
$hash[$value] = $key;
}
}
}很显然hash来处理更快
首先看看以下代码:代码1:<?php $a=0.1; $b=0.7; if($a+$b==0.8) { echo "1"; } else{ echo "2"; } ?>代码2:<?php &n...
php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class studen...
重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/** * 获取应用根目录 * @return string */ public static function getRootP...
参数中包含gb2312的字符串,返回结果是false或者null(不同PHP版本具有差异性)代码:<?php $dbms = 'mysql'; $host = '192.168.8.8'; $dbName =&n...
在编写多进程的实例中我在每个进程中使用如下代码://调用等待信号的处理器 while (true) { pcntl_signal_dispatch(); }开启5个进程,cpu直接100%修正之后的代码://调用等待信号的处理器 while&...
【一】.迭代器迭代是指反复执行一个过程,每执行一次叫做一次迭代。比如下面的代码就叫做迭代:1. <?php 2. $data = ['1', '2', &...