【轻知识】php模拟面试——算法篇

这篇博客分享了作者在PHP面试中遇到的算法问题,包括烧绳子问题、坐标点判断矩形、最小栈、旋转矩阵、排序算法如归并、快速排序的多种实现,以及如何通过刷题提升算法能力。同时提到了leetcode的排序数组题目和堆排序的PHP实现参考链接。
摘要由CSDN通过智能技术生成

我面试遇到的脑筋急转弯
1.烧绳子问题

一根绳子不规则,烧完它1个小时,怎么计时 30分钟。

答案:两头烧。(折叠烧不对。你就记住两头烧,这是面试官要的答案。)

(参考:烧绳子问题:烧一根不均匀的绳,从头烧到尾总共需要1个小时)

我面试遇到的算法题
给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,1],[1,0]) 能组成一个矩形。

  1. 最小栈

面试题 01.07. 旋转矩阵

高频的高级排序
leetcode 912. 排序数组 只能用n log n的排序来做这道题。不然都超时。

归并
自上而下——递归

class Solution {

public function mergeSort(array $arr) :array {
    $count = count($arr);
    $this->_mergeSort($arr, 0, $count -1);
    return $arr;    
}

private function _mergeSort(array &$arr, $l, $r) {
    if ($l >= $r) {
        return ;
    }
    $mid = floor(($l + $r) / 2);
    $this->_mergeSort($arr, $l, $mid);
    $this->_mergeSort($arr, $mid + 1, $r);
    $this->_merge($arr, $l, $mid, $r);
}

private function _merge(array &$arr, $l, $mid, $r) {
    $aux = [];

    for ($i=$l; $i <= $r; $i++) { 
        $aux[$i - $l] = $arr[$i];
    }

    $i = $l;
    $j = $mid + 1;
    for ($k=$l; $k <= $r; $k++) { 
        if ($i > $mid) {
            $arr[$k] = $aux[$j - $l];
            $j++;
        } elseif ($j > $r) {
            $arr[$k] = $aux[$i - $l];
            $i++;
        } elseif ($aux[$i - $l] < $aux[$j - $l]) {
            $arr[$k] = $aux[$i - $l];
            $i++;
        } else {
            $arr[$k
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值