Rumah > Artikel > pembangunan bahagian belakang > Algoritma asas biasa untuk temu bual PHP (dengan contoh kod)
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.
Pembelajaran yang disyorkan: "Tutorial Video PHP"
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!
Jujukan Fibonacci
Imbas Folder
Carian binari
Isih gelembung
Isih cepat
LeetCode Soalan Pertama
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 == '.' || $file == '..') continue; //linux下一切皆文件 $newDir = $dir . '/' . $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]));
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!