二分查找 python

缺失数字

http://www.nowcoder.com/questionTerminal/9ce534c8132b4e189fd3130519420cde

因为缺失了 一个数字 所以 下标指向数组的值 一定是 大于或者等于 当前 下标的
所有采用 二分的方法 逐个的去逼近 缺失的值
无非就是两种情况
第一种:下标指向的值 等于 当前的下标,那么 缺失的肯定是在当前下标的右侧,所以left=mid+1
第二钟:下标指向的值 大于 当前的下标,那么 缺失的肯定是在mid的左侧,所以right=mid
最后逼近到 left = mid + 1的时候 mid的左侧都是不确实的,mid+1就正好是缺失的值
并且此时 left == right 所以跳出循环 返回正确的答案

class Solution:
    def solve(self , a ):
        n = len(a)
        if n == 0: return 0
        # border condition
        if a[0] != 0: return 0
        if a[-1] + 1 == n: return n
        # mid condition
        left, right = 0, n - 1
        while left < right:
            mid = left + (right - left) // 2
            # 相等的情况 结果只会出现在 mid 右侧
            if a[mid] == mid:
                left = mid + 1
            # 只会出现 所在下标的取值 大于等于 当前 下标
            if a[mid] > mid:
                right = mid
        return left
全部评论
[0,1,3,5]返回值只有2,没有4该怎么解决
点赞 回复
分享
发布于 2021-05-11 11:22

相关推荐

15 收藏 评论
分享
牛客网
牛客企业服务