二分查找
题目:在一个有序数组中查找>=某个数的最左侧的位置
package com.nsu.search;
/**
* @program: datastruct
* @ClassName NearLeftSearch
* @description: 在一个有序数组中,找>=某个数最左侧的位置
* @author: lixiangqing
* @create: 2021-01-07 21:57
* @Version 1.0
**/
public class NearLeftSearch {
public static int nearLeftIndex(int[] sortedArr, int value) {
// 判断极端情况
if (sortedArr == null || sortedArr.length == 0) {
return -1;
}
int left = 0;
int right = sortedArr.length - 1;
//记录最左的值的位置
int index = -1;
while (left <= right) {
int middle = left + ((right - left) >> 1);
// 如果中间位置的值大于要查找的值
if (sortedArr[middle] >= value) {
// 往左缩小范围
index = middle;
right = middle - 1;
} else {
//往右缩小范围
left = middle + 1;
}
}
return index;
}
}