返回结果:
1、如果目标值存在数组里,返回目标值的索引
2、如果目标值不在数组,返回目标值应该插入的位置(插入能够保证数组有序)
一
def lower_bound(array, first, last, value): # 返回[first, last)内第一个不小于value的值的位置
while first < last: # 搜索区间[first, last)不为空
mid = first + (last - first) // 2 # 防溢出
if array[mid] < value: first = mid + 1
else: last = mid
return first # last也行,因为[first, last)为空的时候它们重合
二
public int firstOccurrence(int[] nums, int target) {
int low = 0, high = nums.length-1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (nums[mid] < target) { low = mid + 1; }
if (nums[mid] >= target) { high = mid - 1; }
}
return low;
}
参考:
https://www.zhihu.com/question/36132386/answer/530313852