PHP面试之常见基础算法(附代码示例)
本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了关于常见基础算法的相关内容,包括了斐波那契数递归法、扫描文件目录、二分查找等问题,下面根据实际代码一起来看一下,希望对大家有帮助。
推荐学习:《PHP视频教程》
前言
PHP 是世界上最好的语言,一度认为算法对于 PHPer 是多余的存在,而往往面试来讲也有略微的考察,相信大家在大多数面试情况下都会被要求写冒泡排序,然而也有部分 PHPer 连冒泡排序都写半天(比如我)
一般面试以下几种算法足以应对!!!如有错误请评论修订,谢谢!
已完成
斐波那契数列
扫描文件夹
二分查找
冒泡排序
快速排序
LeetCode 第一题
TODO
堆排序
选择排序
链表翻转
动态规划
<?php class Algorithmic { /*** * 斐波那契数递归法,f(n) = f(n-1) + f(n-2) 递归层级太多,调用栈爆满,100层 */ function fib($n) { if ($n < 2) { return 1; } else { return $this->fib($n - 1) + $this->fib($n - 2); } } /*** * 使用数组存储每一个fib(n)的数值,空间复杂度增加 * @param $dir * @return array */ function fib2($n) { if ($n < 2) { return 1; } else { $arr = [1, 1]; for ($i = 2; $i <= $n; $i++) { $arr[$i] = $arr[$i - 1] + $arr[$i - 2]; } } return $arr[$n]; } /*** * 使用两个临时变量存储前两个值fib(n)的数值,空间复杂度增加比数组降低 * @param $dir * @return array */ function fib3($n) { if ($n < 2) { return 1; } else { $last = 1; //等式第二项 $lastLast = 1; //等式第一项 for ($i = 2; $i <= $n; $i++) { $current = $last + $lastLast; $lastLast = $last; $last = $current; } return $current; } } /*** * 扫描文件目录 * @param $dir * @return array */ function scanFile($dir) { $fileList = []; if (is_dir($dir)) { $dh = opendir($dir); while ($file = readdir($dh)) { if ($file == '.' || $file == '..') continue; //linux下一切皆文件 $newDir = $dir . '/' . $file; if (is_dir($newDir)) { $fileList[][$file] = $this->scanFile($newDir); } else { $fileList[] = $file; } } closedir($dh); } return $fileList; } /*** * 二分查找 */ function binarySort($arr, $target) { if (!is_array($arr) || count($arr) < 2) { return $arr; } $len = count($arr); $start = 0; $end = $len - 1; while ($start <= $end) { $middle = floor(($start + $end) / 2) ; if ($arr[$middle] == $target) { return $middle; } elseif ($arr[$middle] < $target) { $start = $middle + 1; } else { $end = $middle - 1; } } return false; } /*** * 冒泡排序 */ function bubbleSort($arr) { for ($i = count($arr) - 1; $i > 0; $i--) { for ($j = 0; $j < $i; $j++) { if ($arr[$j+1] < $arr[$j]) { $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } return $arr; } /*** * 快排序 */ function quickSort($arr) { if (!is_array($arr) || count($arr) < 2) { return $arr; } $base = $arr[0]; $left = []; $right = []; for ($i = 1; $i <= count($arr) - 1; $i++) { if ($arr[$i] < $base) { $left[] = $arr[$i]; } else { $right[] = $arr[$i]; } } return array_merge(array_merge($this->quickSort($left),[$base]), $this->quickSort($right)); } /*** * 两数之和, LeetCode第一题 * @param $arr */ function twoSum($arr, $sum = 8){ $tempArr = []; foreach ($arr as $k => $v) { if (isset($tempArr[$v])) { return [$k, $tempArr[$v]]; } $tempArr[$sum-$v] = $k; } return []; } } $algorithmic = new Algorithmic(); //var_dump($algorithmic->scanFile("./")); //var_dump($algorithmic->twoSum([4,5,3,4,5,67,787])); //var_dump($algorithmic->fib3(4)); // 1 1 2 3 5 //var_dump($algorithmic->binarySort([1,3, 4, 5,7,9], 3)); // var_dump($algorithmic->quickSort([14,5,13,114,4,3,167,87,14]));
推荐学习:《PHP视频教程》
相关阅读 更多
-
mail.ru是什么邮箱 mail.ru邮箱登录入口 时间:2025-09-10
-
输入gpedit.msc找不到文件的原因及解决方案 时间:2025-09-10
-
nrg是什么格式文件?nrg文件用什么打开? 时间:2025-09-10
-
JavaScript中removeChild删除所有子节点方法详解(附代码) 时间:2025-09-10
-
Java运行时异常(RuntimeException)的原因及解决办法 时间:2025-09-10
-
PHP中随机数生成的方法有哪些(生成随机数的函数) 时间:2025-09-10
今日更新
-
决胜巅峰露比星舞月镰什么时候上线-露比皮肤上线时间
阅读:18
-
代号砰砰欲火燧石怎么获得-欲火燧石获取方法
阅读:18
-
三国望神州荀彧怎么样-望神州荀彧技能养成玩法
阅读:18
-
同名梗是什么梗指网络流行语中相同名称却有不同含义的趣味现象,一秒get全网热梗冷知识!
阅读:18
-
地下城堡4巧匠院传送门怎么开启-地下城堡4传送门开启方法
阅读:18
-
地下城堡4森林守护者怎么玩-森林守护者技能
阅读:18
-
如鸢九月洞窟配队-伤寒砸病抡怎么过
阅读:18
-
群星纪元全新普攻英雄-艾拉·机语者今日登陆战场
阅读:18
-
未定事件簿主线第十七章-伊卡洛斯之羽(下)现已开启
阅读:18
-
三国望神州有哪些强力武将-望神州T0版本之子武将推荐
阅读:18