请实现有重复数字的升序数组的二分查找。
输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数(指不存在大于等于查找值的数),则输出数组长度加一。
示例:
输入: 5,4,[1,2,4,4,5] 输出:3 (输出位置从1开始计算 )
#
# 二分查找
# @param n int整型 数组长度
# @param v int整型 查找值
# @param a int整型一维数组 有序数组
# @return int整型
#
class Solution:
def upper_bound_(self , n , v , a ):
# write code here
left, right = 0, n - 1
while left < right:
mid = (left + right ) // 2
if a[mid] >= v:
right = mid
elif a[mid] < v:
left = mid + 1
if a[right] < v:
return n + 1
else:
return right + 1