PHP面试算法题(高频真题+详细手写答案)_第1页
PHP面试算法题(高频真题+详细手写答案)_第2页
PHP面试算法题(高频真题+详细手写答案)_第3页
PHP面试算法题(高频真题+详细手写答案)_第4页
PHP面试算法题(高频真题+详细手写答案)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP面试算法题(高频真题+详细手写答案)本次题库为PHP后端面试高频算法题型,贴合企业真实面试场景,包含基础逻辑、字符串处理、数组算法、经典排序、实战应用题,所有代码均可直接运行,附带详细解题思路、步骤解析,无冗余话术,适合面试刷题、技术复盘。一、基础逻辑算法题1、斐波那契数列(输出前20项)题目描述:斐波那契数列规则:第一项、第二项为1,从第三项开始,每一项等于前两项之和。使用PHP输出前20项数列。解题思路:定义初始两个基础数值,通过循环迭代计算后续数值,避免递归冗余耗时,适配业务常用迭代写法。参考答案:php

<?php

//初始化前两项

$a=1;

$b=1;

//存储结果

$res=[$a,$b];

//循环计算第3-20项

for($i=3;$i<=20;$i++){

$c=$a+$b;

$res[]=$c;

//数值前移,准备下一次计算

$a=$b;

$b=$c;

}

//打印结果

echoimplode(',',$res);

?>输出结果:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,67652、判断质数(素数)题目描述:编写PHP函数,接收一个正整数,判断该数是否为质数,返回布尔值。质数定义:大于1,且只能被1和自身整除的整数。解题思路:1、小于2的数直接排除;2、2是唯一偶数质数;3、大于2的偶数直接排除;4、只需遍历平方根以内的数字判断,减少循环次数,优化性能。参考答案:php

<?php

functionisPrime(int$num):bool

{

//小于2不是质数

if($num<2){

returnfalse;

}

//2是质数

if($num==2){

returntrue;

}

//偶数直接排除

if($num%2==0){

returnfalse;

}

//遍历平方根以内的奇数

$sqrt=sqrt($num);

for($i=3;$i<=$sqrt;$i+=2){

if($num%$i==0){

returnfalse;

}

}

returntrue;

}

//测试

var_dump(isPrime(17));//true

var_dump(isPrime(20));//false

?>二、字符串算法高频题1、反转字符串(不使用strrev函数)题目描述:不使用PHP内置strrev函数,手动实现字符串反转功能,兼容中英文字符串。解题思路:将字符串转为数组,倒序遍历拼接,使用mb系列函数兼容中文,避免乱码。参考答案:php

<?php

functionreverseStr(string$str):string

{

$len=mb_strlen($str);

$newStr='';

//倒序拼接字符

for($i=$len-1;$i>=0;$i--){

$newStr.=mb_substr($str,$i,1);

}

return$newStr;

}

//测试

echoreverseStr('PHP面试算法');//法算试面PHP

?>2、统计字符串中出现次数最多的字符题目描述:编写函数,统计一段字符串中出现频次最高的字符及次数,区分大小写。解题思路:拆分字符串为单字符数组,遍历统计频次,找出最大值对应的字符。参考答案:php

<?php

functiongetMaxChar(string$str):array

{

$len=mb_strlen($str);

$count=[];

//遍历统计字符次数

for($i=0;$i<$len;$i++){

$char=mb_substr($str,$i,1);

$count[$char]=isset($count[$char])?$count[$char]+1:1;

}

//找出最大值

$maxCount=max($count);

//筛选对应字符

$maxChar=array_keys($count,$maxCount);

return[

'char'=>$maxChar[0],

'count'=>$maxCount

];

}

//测试

print_r(getMaxChar('abccdeccc'));

//输出:Array([char]=>c[count]=>4)

?>三、数组算法高频真题1、数组去重(不使用array_unique)题目描述:不使用PHP内置array_unique函数,手动实现一维数组去重。解题思路:遍历原数组,通过键名判断元素是否已存入新数组,实现去重,效率高于内置函数。参考答案:php

<?php

functionarrayDistinct(array$arr):array

{

$newArr=[];

foreach($arras$val){

//键名唯一,自动去重

if(!in_array($val,$newArr)){

$newArr[]=$val;

}

}

return$newArr;

}

//测试

$testArr=[1,2,2,3,3,3,'php','php'];

print_r(arrayDistinct($testArr));

//输出:Array([0]=>1[1]=>2[2]=>3[3]=>php)

?>2、二维数组根据指定字段排序题目描述:常见业务场景,对用户二维数组,根据年龄字段升序排序。解题思路:使用usort自定义排序规则,适配业务多维数组排序需求,面试高频考点。参考答案:php

<?php

$user=[

['name'=>'张三','age'=>25],

['name'=>'李四','age'=>20],

['name'=>'王五','age'=>28]

];

//根据age升序排序

usort($user,function($a,$b){

return$a['age']-$b['age'];

});

print_r($user);

//排序后:李四20、张三25、王五28

?>3、两数之和题目描述:给定一个整数数组和一个目标值,找出数组中两个相加等于目标值的下标,同一个元素不能使用两次。解题思路:遍历数组,通过差值匹配,用哈希数组存储已遍历数值,时间复杂度O(n)。参考答案:php

<?php

functiontwoSum(array$nums,int$target):array

{

$temp=[];

foreach($numsas$k=>$v){

//计算需要匹配的差值

$diff=$target-$v;

if(isset($temp[$diff])){

//返回两个下标

return[$temp[$diff],$k];

}

$temp[$v]=$k;

}

return[];

}

//测试

$nums=[2,7,11,15];

$target=9;

print_r(twoSum($nums,$target));//输出Array([0]=>0[1]=>1)

?>四、经典排序算法(PHP手写)1、冒泡排序题目描述:手写冒泡排序,实现一维数组升序排序。核心逻辑:相邻元素两两对比,大的往后置换,每轮循环确定一个最大值。参考答案:php

<?php

functionbubbleSort(array$arr):array

{

$len=count($arr);

//外层控制循环轮数

for($i=0;$i<$len-1;$i++){

//内层两两比较

for($j=0;$j<$len-1-$i;$j++){

if($arr[$j]>$arr[$j+1]){

//交换位置

$temp=$arr[$j];

$arr[$j]=$arr[$j+1];

$arr[$j+1]=$temp;

}

}

}

return$arr;

}

//测试

$arr=[5,2,9,1,5,6];

print_r(bubbleSort($arr));

?>2、快速排序(面试必考)题目描述:手写快速排序,PHP最常考排序算法。核心逻辑:选取基准值,拆分左右数组,递归排序。参考答案:php

<?php

functionquickSort(array$arr):array

{

$len=count($arr);

//递归终止条件

if($len<=1){

return$arr;

}

//选取中间基准值

$mid=$arr[floor($len/2)];

$left=$right=[];

//拆分左右数组

foreach($arras$v){

if($v<$mid){

$left[]=$v;

}elseif($v>$mid){

$right[]=$v;

}

}

//递归合并

returnarray_merge(quickSort($left),[$mid],quickSort($right));

}

//测试

$arr=[8,3,6,2,10,1];

print_r(quickSort($arr));

?>五、综合实战算法题1、截取字符串无乱码(兼容中英文,自动补省略号)题目描述:业务常用算法,截取指定长度字符串,中文不拆分、无乱码,超出长度补充...,不足则原样返回。参考答案:php

<?php

functionsubStrCut(string$str,int$len=10):string

{

if(mb_strlen($str)<=$len){

return$str;

}

returnmb_substr($str,0,$len).'...';

}

//测试

echosubStrCut('PHP后端开发面试算法题',6);

//输出:PHP后端开...

?>2、找出数组中唯一出现一次的数字(其余数字均出现两次)题目描述:给定数组,仅有一个数字出现一次,其余数字均出现两次,找出这个唯一数字。解题思路:利用异或运算特性,相同数字异或为0,0异或任何数为本身,算法效率极高。参考答案:php

<?php

functionfindSingleNum(array$arr):int

{

$res=0;

foreach($arras$val)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论