<?php
$c = [1,2,4,8,18,20,33,66,99];
function indexOfNumb(array $base, $x) {
$leftI = 0;
$rightI = count($base) - 1;
do {
$centerI = floor(($rightI + $leftI) / 2);
if($base[$centerI] === $x) {
return $centerI;
} elseif($base[$centerI] > $x && $centerI !== $rightI) {
$rightI = $centerI;
} elseif($base[$centerI] < $x && $centerI !== $leftI) {
$leftI = $centerI;
} else {
return ($x - $base[$leftI] > $base[$rightI] - $x) ? $rightI : $leftI;
}
} while(1);
}
var_dump(indexOfNumb($c, 65));
preferences:
57.31 ms | 402 KiB | 5 Q