Time: 20190909
Type: Easy

题目描述

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

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

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

示例:

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-bad-version
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

仍然采用相邻时退出的策略,最后在循环之外做一下判断,二分搜索只做范围缩小。

本题是典型的xxxxxxxxxxxxxoooooooo类的问题,每次搜索丢一半。

代码

# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):class Solution:def firstBadVersion(self, n):""":type n: int:rtype: int"""# 版本天然有序,所以二分搜索,寻找第一个出错的版本start, end = 1, n # 二分搜索只负责缩小范围, start + 1 == n时退出while start + 1 < end:mid = start + (end - start) // 2print(mid)if isBadVersion(mid):# 向前走end = midelse:start = mid# print(isBadVersion(1))if isBadVersion(start):return startif isBadVersion(end):return end

要注意最后的判断,先判断左边的,再判断右边的,因为最后一定会收缩到end指向错误的,low指向错误的,或者非错误的。

END.

Leetcode 278.第一个错误的版本相关推荐

  1. Java实现 LeetCode 278 第一个错误的版本

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

  2. LeetCode 278. 第一个错误的版本(二分查找)

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

  3. leetcode 278. 第一个错误的版本(二分)

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

  4. leetcode 278. 第一个错误的版本(Java版)

    题目 https://leetcode-cn.com/problems/first-bad-version/ 题解 二分查找即可,注意可能会溢出,过程要用 long 类型 /* The isBadVe ...

  5. LeetCode-二分查找-278. 第一个错误的版本

    278. 第一个错误的版本 思路:二分查找法 // The API isBadVersion is defined for you. // bool isBadVersion(int version) ...

  6. 278. 第一个错误的版本

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

  7. 文巾解题 278. 第一个错误的版本

    1 题目描述 2 解题思路 二分查找见:二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def firstBadVersion(self, n):left=1r ...

  8. 力扣 278.第一个错误的版本

    解题思路 二分查找即可 代码 // The API isBadVersion is defined for you. // bool isBadVersion(int version);int fir ...

  9. [刷题]leetcode\278_第一个错误的版本

    python有一个解题思路是把二分查找完的左标尺left和1进行大小比较 class Solution:def firstBadVersion(self, n):""": ...

最新文章

  1. iOS面试准备之思维导图
  2. Java方法中的参数太多,第8部分:工具
  3. 【Linux网络编程学习】socket API(socket、bind、listen、accept、connect)及简单应用
  4. mac osx 下的 mysql_Mac OSX下的MySQL数据库升级
  5. 在C#中??和?分别是什么意思?
  6. 具体数学-第11课(Stern-Brocot树和同余关系)
  7. SQL动态配置,动态解析SQL
  8. 黑马程序员视频-微信小程序-原生框架——项目搭建
  9. 设计模式:UML类图、策略模式、单例模式、工厂模式、观察者模式
  10. 操作必须使用一个可更新的查询
  11. 浏览器与WEB服务器的网络协议
  12. 网吧网管新人对无盘技术不熟
  13. possible formatting directive
  14. window 和linux系统分隔符的不同
  15. 如果Iphone被偷了,能找回来吗?
  16. python 字典计数_python怎么用字典计数
  17. 美橙互联短信服务——发送注册短信并验证
  18. 树莓派3B入门开发之(一)--简介
  19. java基础复习-集合框架(1)
  20. 【Codewars python 4kyu】: Breadcrumb Generator

热门文章

  1. C++---之Arraylist
  2. python---之[::-1]
  3. HTML知识积累及实践(四) - 表单元素
  4. 前端笔记 | CSS基础
  5. 【C++笔记】构造函数与析构函数相关知识
  6. ABB RobotStudio6.08安装
  7. videojs如何获取请求消息_消息队列中,如何保证消息的顺序性?
  8. 光储充一体化充电站_忙时给车充电 闲时上网供电 多能电动车充电站在乐清投用...
  9. 实现语音对讲_什么是五方通话?智慧电梯SIP五方对讲系统详细方案
  10. arcore与unity_Android ARCore –与相机的距离