Rumah > pembangunan bahagian belakang > tutorial php > Algoritma asas biasa untuk temu bual PHP (dengan contoh kod)

Algoritma asas biasa untuk temu bual PHP (dengan contoh kod)

WBOY
Lepaskan: 2023-04-11 06:36:02
ke hadapan
4496 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang PHP, yang terutamanya memperkenalkan kandungan berkaitan tentang algoritma asas biasa, termasuk kaedah rekursi nombor Fibonacci, mengimbas direktori fail, Carian belah dua dan isu lain, mari kita lihatnya berdasarkan kod sebenar saya harap ia akan membantu semua orang.

Algoritma asas biasa untuk temu bual PHP (dengan contoh kod)

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Kata Pengantar

PHP ialah Bahasa terbaik di dunia, algoritma pernah dianggap tidak berguna kepada PHPer, dan ia sering diperiksa sedikit dalam temu bual Saya percaya bahawa semua orang akan diminta untuk menulis jenis gelembung dalam kebanyakan situasi temu duga, tetapi terdapat juga beberapa PHPer yang tidak Malah tidak mempunyai isihan gelembung. Ia mengambil masa yang lama untuk menulis pengisihan (seperti saya)

Secara amnya, algoritma berikut sudah cukup untuk mengendalikan temu duga! ! ! Jika terdapat sebarang kesilapan, sila komen dan semak semula, terima kasih!

Selesai

  • Jujukan Fibonacci

  • Imbas Folder

  • Carian binari

  • Isih gelembung

  • Isih cepat

  • LeetCode Soalan Pertama

TODO

  • Isih Timbunan

  • Isih pilihan

  • Membalak senarai terpaut

  • Pengaturcaraan dinamik

<?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 == &#39;.&#39; || $file == &#39;..&#39;) continue;  //linux下一切皆文件
                $newDir = $dir . &#39;/&#39; . $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]));
Salin selepas log masuk

Pembelajaran yang disyorkan: "Tutorial video PHP

Atas ialah kandungan terperinci Algoritma asas biasa untuk temu bual PHP (dengan contoh kod). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan