二分查找变形问题有很多,本章讲几个经典的,默认数据都是从小到大。
4种常见的二分查找变形问题
- 查找第一个值等于给定值元素
- 查找最后一个值等于给定值元素
- 查找第一个大于等于给定值元素
- 查找最后一个小于大于给定值元素
变体1:查找第一个值等于给定值元素
如果数据集中存在重复数据,如何找到第一个值等于给定值的元素
比如这样一个有序数组,arr=[1,2,3,4,5,5,6,7,10,12,13],其中arr[4],arr[5]的值都是5,希望查找第一个等于5的数据,也就是下标为4的元素。
示例:
function binarySearch($arr, $target) {
$low = 0;
$high = count($arr) - 1;
while ($low <= $high) {
$mid = $low + (($high-$low)>>1);
if ($arr[$mid] > $target) {
$high = $mid - 1;
} else if ($arr[$mid] < $target) {
$low = $mid + 1;
} else {
if