我面试遇到的脑筋急转弯
1.烧绳子问题
一根绳子不规则,烧完它1个小时,怎么计时 30分钟。
答案:两头烧。(折叠烧不对。你就记住两头烧,这是面试官要的答案。)
(参考:烧绳子问题:烧一根不均匀的绳,从头烧到尾总共需要1个小时)
我面试遇到的算法题
给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,1],[1,0]) 能组成一个矩形。
- 最小栈
面试题 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