题目:请实现有重复数字的有序数组的二分查找。
输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。

n int整型 数组长度
v int整型 查找值
a int整型一维数组 有序数组

如果数组a中有任何值是大于 查找值v 的 则返回该值的位置 如果数组a中不存在这个数值的话 则输出数组长度加一:

->草稿:
    for i in range(n):
        if a[n-1] < v:
        return n+1

        (因为 n 为len(a),如果没有比测试值更加大的,则返回数组长度n+1)

依题意,要求使用二分法进行分析:

    Begin  x  x  x  Middle  x  x  x End

接下来就很简单了:
1. 首先确定Middle的值:
    Begin = 0
    End = n - 1 
        
    while Begin < End:
        Middle = (Begin + End)//2
        (因为涉及到位置需要进行整除法)
        If a[Mid] >= v:
             Begin = End
        else:(不够大的情况)
            Begin = Middle + 1      
    return left +1 (返回序数,因为题目解释了 输出位置从1开始计算)
输出位置从1开始计算  
上完整代码,支持Python 3.9运行环境:
#
# 二分查找
# @param n int整型 数组长度
# @param v int整型 查找值
# @param a int整型一维数组 有序数组
# @return int整型
#
class Solution:
    def upper_bound_(self , n , v , a ):
        # write code here
        if a[n-1] < v:
            return n+1
        Begin = 0
        End = n-1
        while Begin < End:
            Middle = (Begin + End)//2
            if a[Middle] < v:
            #那么就从Mid的下一位开始计关注起
                Begin = Middle + 1
            else:
                End = Middle
        return Begin + 1
        #输出位置从1开始计算