📜  门| GATE-CS-2003 |问题14(1)

📅  最后修改于: 2023-12-03 14:58:25.744000             🧑  作者: Mango

问题14
题目描述

给定一个函数isBadVersion(version),该函数返回一个版本号是否正确,如果版本错误,则isBadVersion(k)将返回True,其中k是错误版本的第一个整数。

实现一个算法来查找第一个错误版本。您可以假设所有版本都是按顺序排序的,第一个错误版本必须存在。

请实现以下函数:

def firstBadVersion(n):
  """
  :type n: int
  :rtype: int
  """
代码实现
def firstBadVersion(n):
    """
    :type n: int
    :rtype: int
    """
    left, right = 1, n
        
    while left < right:
        mid = (left + right) // 2
        if isBadVersion(mid):
            right = mid
        else:
            left = mid + 1
                
    return left
思路说明

这是一道二分查找的问题,应用经典的二分查找算法解决,需要注意的地方是:

  1. left等于right的时候停止(一定是错误版本)。
  2. 在判断是否为错误版本的时候,如果是则需要在左半区间继续查找,否则在右半区间查找,循环终止的时候一定是left为所求。

时间复杂度为O(logn)。