龙空技术网

挑战!一个数组和一个数值,在数组中找出两个数的和等于这个数值

代码庸医 67

前言:

如今同学们对“php找出两个数组中相同的元素”大致比较讲究,大家都需要了解一些“php找出两个数组中相同的元素”的相关文章。那么小编同时在网上网罗了一些关于“php找出两个数组中相同的元素””的相关内容,希望各位老铁们能喜欢,我们快快来了解一下吧!

下面是来自leetcode的一个简单的题目(小编能力有限只能挑战下简单的):

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]

解题开始

第一种解法[暴力解法],也是最大众化的解法,so easy。

解题思路:循环数组内的值,将当前的值和后面的值依次相加。

function twoSum($nums, $target) {    $nums_lenth = count($nums);    for($i=0; $i< $nums_lenth; $i++){        for($j=$i+1; $j< $nums_lenth; $j++){            if ($nums[$i] + $nums[$j] == $target) {                break ;            }         }    }    return [$i, $j];   }

这种解法的结果是没问题的,但是效率可想而,肯定不高,而且违背的题目的限制条件(数组中同一个元素不能使用两遍)。所以不能使用该方法,下面就是小编自己的另一种解法。

解题思路:

1.循环数组,用目标值减去数组中当前的值 ($target-$n)

2.判断上一步的结果在不在数组中(用array_keys方法判断),如果在数组中array_keys的返回值不为空。

3.循环array_keys后的结果,过滤当前值(因为数组可能为[3,3],目标值为6,array_keys的结果即为一个数组)。

function twoSum($nums, $target) {        foreach($nums as $key=>$n)        {            $secnum = $target-$n;            $seckeys=array_keys($nums,$secnum);            foreach($seckeys as $seckey)            {                if( $seckey!=$key)                {                    return [$key,$seckey];                }            }        }    }

在LeetCode上提交测试后,反馈如下:

执行用时:144 ms (已经战胜 48.01 % 的 php 提交记录)

内存消耗:15.6 MB(已经战胜 94.36 % 的 php 提交记录)

小编看到该代码的内存消耗尚可,但是执行用时居然还没达到平均水平,又改了几次代码提交均不理想,后来参考网上大神的方案,还有更好的解法,这里小编就不放出来了,留给大家一起思考吧

标签: #php找出两个数组中相同的元素 #php找出两个数组中相同的元素的方法