2021PHP面试准备(算法篇)

只是个人总结的感悟,欢迎被怼

被别人面试,很多东西是需要提前准备的,面试应该是提取过程,不应该是思考过程

以后自己算法一类的总结都写到这篇文章里面

最大子序列

<?php
/**
 * User: LYJ
 * 最大子序列之和 求[-2,11,-4,13,-5,-2]最大子序列
 * 最常规的做法以第一个数为基数相加,求第一个数为基数的最大数
 * 第二个数为基数的相加最大数...求最大数
 */
$array = [-2, 11, -4, 13, -5, -2];
function maxsubs($arr) {
    $maxsum = 0;
    $length = count($arr);
    for ($i = 0; $i < $length; $i++) {
        $thissub = 0;
        for ($j = $i; $j < $length; $j++) {
            $thissub += $arr[$j];
            if ($thissub > $maxsum) {
                $maxsum = $thissub;
            }
        }
    }
    return $maxsum;
}
echo maxsubs($array);

冒泡排序:

/**
 *    a    b    c
 *    c  =  a
 *    a  =  b
 *    b  =  c
 *
 * 冒泡排序
 * [35,15,27,23,99,78,65,232,12,9,340,89]
 */
$array = [35, 15, 27, 23, 99, 78, 65, 232, 12, 9, 340, 89];
function maopao($arr) {
    $length = count($arr);
    for ($i = 0; $i < $length - 1; $i++) {
        for ($j = 0; $j < $length - $i - 1; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $tmp;
            }
        }
    }
    return $arr;
}

插入排序

/**
 * 插入排序  [35, 15, 27, 23, 99, 78, 65, 232, 12, 9, 340, 89]
 * insertion Sort
 */
function insert_sort($arr){
    $count = count($arr);
    for($i=1; $i<$count; $i++){
        $tmp = $arr[$i];
        for($j=$i-1;$j>=0;$j--){
            if($arr[$j]>$tmp){
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            }
        }
    }
    return $arr;
}
print_r(insert_sort($array));

约瑟夫环:

function king($n,$m){
    $monkeys = range(1,$n);
    $i=0;
    while(count($monkeys)>1){
        if(($i+1)%$m==0){
            unset($monkeys[$i]);
        }else{
            array_push($monkeys,$monkeys[$i]);
            unset($monkeys[$i]);
        }
        $i++;
    }
    return current($monkeys);
}
echo king(5,3);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值