首页 > 编程语言 >力扣278(java&python)-第一个错误的版本(简单)

力扣278(java&python)-第一个错误的版本(简单)

时间:2022-11-14 19:47:13浏览次数:50  
标签:right java python isBadVersion mid 力扣 int 版本 left

题目:

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

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

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

 
示例 1:

输入:n = 5, bad = 4
输出:4
解释:
调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true
所以,4 是第一个错误的版本。
示例 2:

输入:n = 1, bad = 1
输出:1
 

提示:

  • 1 <= bad <= n <= 231 - 1

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

解题思路:

【二分查找】

题目中要求要尽量减少对调用 API 的次数,所以要尽可能的缩小检索的范围,这样就可以将调用检查接口的次数降到最低。且题目中提到错误的版本之后的所有版本都是错的。这样就可以利用二分查找法:

  • 设置左右边界并初始化left = 1,right = n,循环的条件是:left < right,mid = left + (right - left) / 2;
  • 如果该版本是正确版本,那么第一个错误版本一定在当前mid的右侧,答案一定在[mid+1, right]范围内,即left = mid + 1;
  • 如果该版本是错误版本,那么第一个错误版本有可能为当前版本或者当前版本之前的版本,答案一定在[left, mid]范围内,即right = mid。
  • 最后一定有:left == right,区间为一个点,返回left或者right都可以。

java代码:

 1 /* The isBadVersion API is defined in the parent class VersionControl.
 2       boolean isBadVersion(int version); */
 3 
 4 public class Solution extends VersionControl {
 5     public int firstBadVersion(int n) {
 6         int left = 1, right = n;
 7         while(left < right){
 8             int mid = left + (right - left) / 2;
 9             //true:是错误版本,有可能mid就是答案
10             if(isBadVersion(mid)){
11                 right = mid;
12             }else{
13                 //false:正确版本,往后移
14                 left = mid + 1;
15             }
16         }
17         return left;
18     }
19 }

 python3版本:

 1 # The isBadVersion API is already defined for you.
 2 # def isBadVersion(version: int) -> bool:
 3 
 4 class Solution:
 5     def firstBadVersion(self, n: int) -> int:
 6         left, right = 1, n
 7         while left < right:
 8             mid = left + (right - left) // 2
 9             if isBadVersion(mid):
10                 right = mid
11             else:
12                 left = mid + 1
13         return right

标签:right,java,python,isBadVersion,mid,力扣,int,版本,left
From: https://www.cnblogs.com/liu-myu/p/16889814.html

相关文章

  • 小新Java8-【final、权限、内部类、引用类型】
    一、final关键字1.概述final:不可改变。可以用于修饰类、方法和变量。类:被修饰的类,不能被继承。方法:被修饰的方法,不能被重写。变量:被修饰的变量,不能被重新赋值。2.......
  • 第一天复习Java基础
    java基础语法1注释,标识符,关键字注释书写注释是一个很好的习惯,他是写给人看的。平时写代码一定要规范Java的三种注释单行注释//多行注释/*注释*/(可以注释多......
  • python 多进程 多线程 协程
    多进程-进程池1fromconcurrent.futuresimportProcessPoolExecutor23withProcessPoolExecutor(max_workers=10)asexecutor:4results=executor.map......
  • 从新开始学Python - 字符串扩展3
    字符串定义方法单引号双引号三个双引号,例如"""Python学习"""三个双引号与多行注释相同,也可以支持换行,如果不用变量接受,则为多行注释,如果用变量接受,则为字符串、......
  • 【JAVA面试】java面试题整理(4)
                          java面试题整理(4)JAVA常考点4目录​​1、Set集合如何保证不重复1​​​​2、Java中Integer型和int型......
  • 【Spark】java.lang.NoSuchMethodException: org.apache.hadoop.hive.ql.metadata.Hiv
    2/11/1419:02:23ERROR[main]SparkUncaughtExceptionHandler:UncaughtexceptioninthreadThread[main,5,main]java.lang.NoSuchMethodException:org.apache.hado......
  • 20221114-python字符串
    1.字符串定义:    2.字符串的转义符    3.字符串的拼接:      4.字符串的下标:    5.字符串的切片 ......
  • 基于TensorFlow和Python的机器学习(笔记4)
    基于TensorFlow和Python的机器学习(笔记4)    lossMSE=MeanSquaredError均方差 Entropy熵CrossEntropy交叉熵熵越大,越不稳定,惊喜度越高......
  • 用Python解析dolphinscheduler的json并存入到mysql
    第一步连接dolphinscheduler数据库SELECT*FROMdolphinscheduler2.t_ds_process_definitionWHEREproject_id=150005;把process_definition_json值的内容复制出来,保......
  • Python之requests模块-大文件上传
    最近在做接口测试时,拿到一个分片上传文件的接口,http接口请求头中的Content-Type为multipart/form-data。需要在客户端将大文件分片成数据块后,依次传给服务端,由服务端还原成......