二分搜索查找最左边的数
给定一个有序数组,从小到大,有重复值,查找出目标元素在数组中最左边的值。
//循环实现二分查找
function s2($arr,$val) {
$i = 0;
$j = count($arr)-1;
$res = -1; //这里保存目标元素的索引
while($i<=$j) {
$mid = intval($i + ($j-$i) / 2);
$mid_val = $arr[$mid];
echo $i."---".$mid."---".$j."<br>";
if($mid_val < $val) {
$i = $mid+1;
}elseif($mid_val > $val) {
$j = $mid -1;
}else{
$res = $mid; //每次查找相等的情况,更新res索引
$j = $mid-1;
}
}
return $res;
}
$arr = [1,3,3,4,4,4,5,6,7,8,10];
//查找最左边的3
$index = s2($arr,4);
p($index);