PHP算法练习1:两数之和
leetcode地址:https://leetcode-cn.com/problems/two-sum/description/
题目:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解决方案:
<?php
$nums = array(2, 7,15, 11, 1,33,1);
$target =172; $res=twoSum2($nums,$target);
var_dump($res); //===============================方法1===============================
//暴力法
//1.将第一个数与数组中的每个数相加,看是否等于target
//2.如果等于,返回。反之,继续循环
//3.然后第二个数与数组中每个数相加...
function twoSum($nums,$target)
{
for ($i=0;$i<count($nums);$i++){
for ($j=$i+1;$j<count($nums);$j++){
if ($nums[$i]+$nums[$j]==$target){
return array($i,$j);
}
}
}
return "没有匹配的数据";
} //===============================方法2===============================
//双指针法
//1.需要2个数组,一个是原数组(查找值),一个是对原数组排序后的数组(查找索引)
//2.两个指针,left和right(最小值和最大值)
//3.循环条件为左指针大于右指针,如果左指针等于右指针,说明没有找到匹配的数据
//4.左指针下标的数+右指针下标的数>target,右指针下标-1
//5.左指针下标的数+右指针下标的数<target,左指针下标+1
// 1,4,8,12 target=12
// 1+12>12 右指针下标-1 (假如是左指针+1,则为4+12。❌)
// 1+8<12 左指针下标+1 (假如是右指针-1,则为1+4。 ❌)
// 4+8=12
//6.通过array_search根据值查找对应的下标
function twoSum2($nums,$target)
{
$raw_nums=$nums;
sort($nums);
$left=0;
$right=count($nums)-1;
while($left<$right)
{
$V_left=$nums[$left];
$V_right=$nums[$right];
$two_sum=$V_left+$V_right;
echo $V_left."----".$V_right."<br/>";
if ($two_sum>$target)
{
$right-=1;
}elseif ($two_sum<$target)
{
$left+=1;
}else
{return array(array_search($V_left,$raw_nums),array_search($V_right,$raw_nums));
}
if ($left==$right)
{
return '没有匹配的数据';
}
}
}
知识点补充站:
- for循环https://doc.yonyoucloud.com/doc/PracticalPHP/Introducing_PHP/How_PHP_is_written/loops.html
- 嵌套循环https://doc.yonyoucloud.com/doc/PracticalPHP/Introducing_PHP/How_PHP_is_written/loops_within_loops.html
- sort排序http://php.net/manual/zh/function.sort.php
- array_search根据值返回他的键名http://www.w3school.com.cn/php/func_array_search.asp
在学习该算法时遇到的问题
- 方法名为什么不能用public?(咦,这个错误犯的有点弱智了,好吧,原谅自己是个小白- -!)因为public,private,protected只能在class(类)中使用
- sort排序时千万不能写$rs=sort($data);因为返回的是一个布尔值,排序成功还是失败
总结:
主要通过循环解决此问题,可分为单指针和双指针方法,及哈希(看了一轮,不大懂哈希,日后在补充哈希的解法)
PHP算法练习1:两数之和的更多相关文章
- 前端与算法 leetcode 1. 两数之和
目录 # 前端与算法 leetcode 1. 两数之和 题目描述 概要 提示 解析 解法一:暴力法 解法二:HashMap法 算法 传入[1, 2], [11, 1, 2, 3, 2]的运行结果 执行 ...
- [算法]LeetCode 1.两数之和
LeetCode 1.两数之和(python) 1.朴素解法 最朴素的两个for循环大法: class Solution: def twoSum(self, nums: List[int], targ ...
- leetCode算法——1TwoSum(两数之和)
描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中 ...
- 算法:JavaScript两数之和
题目 Given an array of integers, return indices of the two numbers such that they add up to a specific ...
- leetcode算法1.两数之和
哈喽!大家好,我是[学无止境小奇],一位热爱分享各种技术的博主! [学无止境小奇]的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过. [学无止 ...
- 南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数
问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及 ...
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全 Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...
- LeetCode :1.两数之和 解题报告及算法优化思路
最近开始重拾算法,在 LeetCode上刷题.顺便也记录下解题报告以及优化思路. 题目链接:1.两数之和 题意 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 ...
- LeetCode初级算法之数组:1 两数之和
两数之和 题目地址:https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整 ...
随机推荐
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...
- java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用.每一个类都有构造函数.在程序中没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数 Java中构造函数重载和方法重载很相似.可以为一个类 ...
- 与图论的邂逅04:LCT
本着对数据结构这一块东西的一股兴趣,最近在集训的百忙之中抽空出来学LCT,终于学懂了这个高级玩意儿. 前置知识:Splay和树链剖分 Splay挺复杂的......这里就先不写,不然篇幅太大.树链剖分 ...
- flask下载文件---文件流
html: <a name="downloadbtn" class="btn btn-success pull-right" href="/do ...
- nodejs 前端项目编译时内存溢出问题的原因及解决方案
现象描述 昨天用webpack打包Vue的项目时,node内存溢出而停止build项目,即是项目构建过程中频繁报内存溢出:FATAL ERROR: CALL_AND_RETRY_LAST Alloca ...
- 《DRN: A Deep Reinforcement Learning Framework for News Recommendation》强化学习推荐系统
摘要 新闻推荐系统中,新闻具有很强的动态特征(dynamic nature of news features),目前一些模型已经考虑到了动态特征. 一:他们只处理了当前的奖励(ctr);. 二:有一些 ...
- ForkJoinPool
fork():开启一个新线程(或是重用线程池内的空闲线程),将任务交给该线程处理. join():等待该任务的处理线程处理完毕,获得返回值. ForkJoinPool 的每个工作线程都维护着一个工作队 ...
- mika的模板库
二分图最大匹配: 1.匈牙利算法:注意dfs中是dfs(c[w[i]]),搜索的是与之匹配的点. #include<cstdio> #include<cstring> ],w[ ...
- git 使用过程中遇到的问题does not appear to be a git repository Could not read from remote respository
想把本地的git库上传到github上.github已经新建了一个public仓库,利用网站的命令 git Bash报错:does not appear to be a git repository ...
- 解决 IntelliJ IDEA Tomcat 控制台中文输出乱码问题
解决办法 找到安装IDEA的bin目录将idea.exe.vmoptions和idea64.exe.vmoptions两个文件打开分别在文件最末尾添加-Dfile.encoding=UTF-8