网站首页 > 教程文章 正文
下面是来自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 提交记录)
小编看到该代码的内存消耗尚可,但是执行用时居然还没达到平均水平,又改了几次代码提交均不理想,后来参考网上大神的方案,还有更好的解法,这里小编就不放出来了,留给大家一起思考吧
猜你喜欢
- 2025-06-12 二十、Java数组(java实现数组)
- 2025-06-12 十大经典排序算法-堆排序,计数排序,桶排序,基数排序
- 2025-06-12 3分钟短文 | PHP 根据值移除数组元素,哪个方法最简单?
- 2025-06-12 JAVA程序员常用的几个工具类(java程序员主要工作内容)
- 2025-06-12 C# 基础知识系列- 3 集合数组(c#集合排序)
- 2025-06-12 JUnit5学习之三:Assertions类(junit5 assert)
- 2025-06-12 打工人私藏的4个Excel函数秘籍,效率提升3.7%
- 2025-06-12 稀疏数组——前端电子表格中的应用实战
- 2025-06-12 最快清除数组空值?分享 1 段优质 JS 代码片段!
- 2025-06-12 excel这个复杂数组公式怎么读?(excel数组公式怎么复制)
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)