用 PHP 在 力扣 刷算法 [两数之和]{一天一更} 
                                                    
                        
                    
                    
  
                    
                    题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解析:
在数组中,找到两个数的和等于目标的值,并返回这两个数的键。
解法:
1、两次循环中查找结果,当有这样的值得时候退出,俗称暴力解法。
2、用传说的中的 HashMap ,其实在PHP中就是数组,这个数组就是原数组的键值交换,我们就可以 HashMap了。哈哈~~,在这个数组中 查找目标值减去 当前值在这个数组中是否存在键,有就返回键,没有就继续键值交换。
3、直接操作 PHP 数组,目标值减当前值在数组中是否有值,有返回键,没有继续。为了防止用重复,要删除当前数组的当前值。
看的一脸懵逼,让我们用伟大的 PHP 来一一实现一下:
1、暴力整:
class Solution {
    /**
     * 暴力解法
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $len = count($nums);
        if ($len < 2 ){
            return false;
        }
        for ($i = 0; $i < $len; $i++){
            for ($j = $i + 1; $j < $len; $j++){
                if ($nums[$i] + $nums[$j] == $target){
                    return [$i, $j];
                }
            }
        } 
    }
}
2, HashMap一下,什么是HashMap? 嗯…就是PHP数组!!!哈哈…
class Solution {
    /**
     * HashMap 
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $len = count($nums);
        if(count($nums) < 2){
            return false;
        }
        // 申明一个空数组,专业的说就叫申明一块空间存储映射关系,2333
        $arr = [];
        foreach($nums as $key => $value){
            // 判断当前值和目标值的差是否在申明数组的键中存在
            if(array_key_exists($target - $value, $arr)){
                return [$key, $arr[$target - $value]];
            }
            // 没有直接记录下来
            $arr[$value] = $key;
        }
    }
}
3、直接数组中操作:
class Solution {
    /**
     * 直接数组 
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $len = count($nums);
        if(count($nums) < 2){
            return false;
        }
        foreach ($nums as $key => $value){
            // 删除自己 免得自己加自己
            unset($nums[$key]);
            // 如果目标值减去当前值在数组中存在,返回
            if (in_array($target - $value, $nums)){
                // array_search()返回值对应的键
                return [$key, array_search($target-$value, $nums)];
            }
        }
    }
}
那么,问题来了,那个算法更好呢?
 哈哈…世界上没有更好算法,只有你想要得到什么!!!
催牛,你从成都到北京,直接飞机过去和飞机绕一圈地球过去,肯定直接飞机过去好啊!这个真不好说,我就喜欢做飞机呀,飞机能让我达到人生巅峰。不是吗?
以上这些算法,不同的方式时间和空间都在发生改变哦。 
本作品采用《CC 协议》,转载必须注明作者和本文链接
          
                    
                    
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: