NC105 二分查找

题目描述

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

输入

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
        if n == 0:
            return n+1
        else:
            if a[-1] <= v:
                return n+1
            min_ = 0
            max_ = n
            while True:
                if a[min_] >= v:
                    return min_ + 1
                target = int((max_ + min_) /2)
                if target > 0 and a[target -1] >= v:
                    max_ = target
                else:
                    min_ = target
         

 

posted @ 2021-01-10 09:37  蒋励  阅读(138)  评论(0编辑  收藏  举报