版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版数学 2.1 认识实数(7题型+针对训练) 同步练习 含答案
- 2026 DCMM专项报告数据认责体系建设白皮书-AI数据治理研究院
- 吉林成考高升专理化综合论述真题
- 高级美容师资格考试题库及答案真题题库
- 2026上饶市大学生乡村医生专项计划公开招聘26人笔试备考试题及答案解析
- 2026恒丰银行总行实习生招收笔试参考题库及答案解析
- 2026年深圳市特区建工集团有限公司人员招聘考试模拟试题及答案
- 都江堰市人力资源和社会保障局都江堰市医共体公开招聘编外聘用人员(61人)考试模拟试题及答案解析
- 2026年秋季中原证券股份有限公司招聘9人考试参考题库及答案解析
- 2026兴业银行成都分行社会招聘国际业务产品经理考试备考题库及答案解析
- 个案护理文章书写
- 2026年校招:上海东方枢纽投资建设发展集团面试题及答案
- 提高冠脉介入手术术前准备合格率 QCC成果汇报
- 第7课 《培养德智体美劳全面发展的社会主义建设者和接班人》课件 2026-2027学年统编版语文九年级上册
- 2026年河南林业职业学院高职单招笔试职业技能测验试题库含答案解析2套试卷
- 胰腺癌护理疑难病例讨论
- 2024 火力发电厂烟气二氧化碳捕集系统能耗测定技术规范
- 成都市青羊区新华少城社区卫生服务中心康复医师招聘笔试备考试题及答案详解
- 民宿管理2026年委托协议范本
- 2026年污染源自动监测考核试题题库及答案
- 儿童过敏性鼻炎课件
评论
0/150
提交评论