LeetCode | 0278. First Bad Version第一个错误的版本【Python】

LeetCode 0278. First Bad Version第一个错误的版本【Easy】【Python】【二分】

Problem

LeetCode

You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad version are also bad.

Suppose you have n versions [1, 2, ..., n] and you want to find out the first bad one, which causes all the following ones to be bad.

You are given an API bool isBadVersion(version) which will return whether version is bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.

Example:

Given n = 5, and version = 4 is the first bad version.

call isBadVersion(3) -> false
call isBadVersion(5) -> true
call isBadVersion(4) -> true

Then 4 is the first bad version. 

问题

力扣

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。

假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。

你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

示例:

给定 n = 5,并且 version = 4 是第一个错误的版本。

调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true

所以,4 是第一个错误的版本。 

思路

二分查找

因为版本是从 1 到 n,所以 low 初值设为 1,high 初值设为 n。

时间复杂度: O(logn)
空间复杂度: O(1)

Python代码

# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):

class Solution(object):
    def firstBadVersion(self, n):
        """
        :type n: int
        :rtype: int
        """
        low, high = 1, n  # 1-n
        while low <= high:
            mid = int((low + high) / 2)
            if isBadVersion(mid) == False:
                low = mid + 1
            else:
                high = mid - 1
        return low

代码地址

GitHub链接

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,140评论 0 13
  • 278 First Bad Version 第一个错误的版本 Description:You are a prod...
    air_melt阅读 2,338评论 0 0
  • 本文转载自知乎 作者:季子乌 笔记版权归笔记作者所有 其中英文语句取自:英语流利说-懂你英语 ——————————...
    Danny_Edward阅读 43,984评论 4 38
  • 想寒假去巴厘岛参加深层疗愈课,但是学费好贵,4万多,想去又没钱的感觉很不舒服。想着管公公借点,又不知道怎么张口,也...
    云的成长阅读 26评论 0 0
  • 今天周末,我和妻早早回家,和父母、儿子一起吃个丰盛的晚餐。一进门就听到厨房里锅与铲的奏鸣曲,就知道母亲已经忙着做菜...
    康有趣阅读 994评论 0 1