如何在华为OD机试中获得满分?Java实现【 第一个错误的版本】一文详解!

news2024/11/24 5:38:55

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
  • 2. 输入描述
  • 3. 输出描述
  • 4. Java算法源码
  • 5.解题思路

1. 题目描述

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

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

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

2. 输入描述

n = 5, bad = 4

3. 输出描述

4

调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true
所以,4 是第一个错误的版本。

4. Java算法源码

public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        int left = 1, right = n;
        while (left < right) { // 循环直至区间左右端点相同
            int mid = left + (right - left) / 2; // 防止计算时溢出
            if (isBadVersion(mid)) {
                right = mid; // 答案在区间 [left, mid] 中
            } else {
                left = mid + 1; // 答案在区间 [mid+1, right] 中
            }
        }
        // 此时有 left == right,区间缩为一个点,即为答案
        return left;
    }
}

时间复杂度:O(\log n)O(logn),其中 nn 是给定版本的数量。

空间复杂度:O(1)O(1)。我们只需要常数的空间保存若干变量。

5.解题思路

因为题目要求尽量减少调用检查接口的次数,所以不能对每个版本都调用检查接口,而是应该将调用检查接口的次数降到最低。

注意到一个性质:当一个版本为正确版本,则该版本之前的所有版本均为正确版本;当一个版本为错误版本,则该版本之后的所有版本均为错误版本。我们可以利用这个性质进行二分查找。

这样我们每判断一次都可以缩紧一次边界,而每次缩紧时两边界距离将变为原来的一半,因此我们至多只需要缩紧 O(\log n)O(logn) 次。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/579578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【P36】JMeter 交替控制器(Interleave Controller)

文章目录 一、交替控制器&#xff08;Interleave Controller&#xff09;参数说明二、测试计划设计 一、交替控制器&#xff08;Interleave Controller&#xff09;参数说明 可以将内部的组件在线程迭代时交替执行&#xff1b;交替控制器内部一般会有多个取样器 选择线程组右…

6.6.4 PCS创建Oracle 资源及资源组

在RHCS体系中&#xff0c;Oracle的启动是按以下顺序进行的&#xff1a; VIP。监听器。逻辑卷&#xff08;ISCSI共享出来的&#xff09;。文件系统&#xff08;在逻辑卷上创建&#xff09;。数据库实例。 上边这些资源&#xff0c;在PCS里创建好以后&#xff0c;将其组合成一个…

接口自动化一键集成,Jenkins持续集成Allure报告!

目录 前言&#xff1a; 一、接口测试框架选型 二、接口自动化框架封装的设计 2.1 创建测试用例 2.2 执行测试用例 2.3 生成测试报告 三、 实现Jenkins持续集成 3.1 安装Jenkins 3.2 配置Jenkins 3.3 创建Jenkins任务 四、总结 前言&#xff1a; 接口测试作为软件测试中的…

chatgpt赋能python:Python程序中断

Python 程序中断 Python 是一种高级编程语言&#xff0c;被广泛应用于数据科学和机器学习等领域。但是&#xff0c;有时候我们需要中断 Python 程序的执行&#xff0c;以便处理意外事件或者出现错误时进行调试。在这篇文章中&#xff0c;我们将探讨 Python 程序中断的各种方法…

Rocky9-Linux上安装KVM虚拟机

一、案例环境 使用一台物理机器,安装Rocky9-Linux的64位系统,test01是在宿主机kvm中安装的虚拟机 主机 操作系统 IP地址 主要软件 kvm Centos 7 192.168.100.46 KVM test01 Centos 7 192.168.100.32 虚拟机

梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画

CSS动画并不是绝对比JavaScript动画性能更优越&#xff0c;开源动画库Velocity.js等就展现了强劲的性能。 一、两者的主要区别 先开门见山的说说两者之间的区别。 1&#xff09;CSS动画&#xff1a; 基于CSS的动画一般由浏览器“主线程”之外的独立线程处理&#xff0c;在其…

SpringBoot2-核心技术(一)

SpringBoot2-核心技术&#xff08;一&#xff09; 了解SpringBoot配置文件的使用 文章目录 SpringBoot2-核心技术&#xff08;一&#xff09;了解SpringBoot配置文件的使用一、文件类型1. properties2. yaml 二、yaml的基本使用1. 基本语法2. 数据类型2.1 字面量 2.2 对象2.3 …

Ubuntu系统磁盘分区与挂载

0x00、一些查看信息的命令 sudo fdisk -l 该命令可以列出当前设备上的所有分区表信息。 df -hl 该命令可以查看文件系统磁盘空间的使用情况。 0x01、对磁盘分区 使用命令 sudo fdisk 设备文件名&#xff08;/dev/sda&#xff09; 此处设备路径可以通过上面的fdisk -l命令查看…

测试老鸟总结,性能测试三大核心指标详解,并发/TPS/响应时间...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 抛出问题&#xf…

恒容容器放气的瞬时流量的计算

有时候&#xff0c;你会遇到一个问题&#xff0c;该问题的描述如下&#xff1a; 你有一个已知体积的容器&#xff0c;设容器体积为V&#xff0c;里面装有一定压力(初始压力)的气体&#xff0c;如空气或氢气等&#xff0c;设初始压力为1MPa&#xff0c;容器出口连接着一个阀门开…

服务(第三十一篇)mysql-mmm高可用

MMM是一套支持双主故障切换和双主日常管理的脚本程序。 用来监控和管理 MySQL Master-Master &#xff08;双主&#xff09;复制&#xff0c;虽然叫做双主复制&#xff0c;但是业务上同一时刻只允许对一个主进行写入&#xff0c;另一台备选主上提供部分读服务&#xff0c;以加…

Makefile基础教程(自动生成依赖关系)

文章目录 前言一、makefile不包含.h依赖的后果二、gcc -M 和 gcc -MM命令三、sed命令四、makefile中命令的执行机制四、生成依赖文件并单独放入文件夹中总结前言 在前面的文章中我们都只使用到了.c文件作为依赖但是在实际的工程中肯定是不可能只有.c文件的还存在.h文件,那么在…

CSAPP Lab5- MallocLab

实验目标 本实验需要用c语言实现一个动态的存储分配器&#xff0c;也就是你自己版本的malloc&#xff0c;free&#xff0c;realloc函数。 实验步骤 tar xvf malloclab-handout.tar解压文件 我们需要修改的唯一文件是mm.c&#xff0c;包含如下几个需要实现的函数 int mm_ini…

ChatGPT通用人工智能:初心与未来

至少从 20 世纪 50 年代起&#xff0c;人们就开始大肆宣传可能很快就会创造出一种能够与人类智能的全部范围和水平相匹配的机器。现在&#xff0c;我们已经成功地创造出了能够解决特定问题的机器&#xff0c;其准确度达到甚至超过了人类&#xff0c;但我们仍然无法获得通用智能…

基于STM32F103的HAL库手动配置FreeRTOS

基于STM32F103的HAL库手动配置FreeRTOS 源码下载 FreeRTOS源码下载包括示例工程与内核工程。 示例工程&#xff1a;获取与开发环境相关的架构文件 内核工程&#xff1a;移植FreeRTOS的内核文件 示例工程Gitee地址 内核工程GirHub地址 STM32工程创建 使用STM32CubeMX创建新工…

电动汽车变频器

目录 1、电动汽车与汽油动力车的区别 2、变频器 3、变频器内元件 3.1、汽车变频器的组成和功能 3.1.1、电容器 3.1.2、变频器控制单元 3.1.3、逆变桥驱动单元 3.1.4、逆变桥单元 3.2、汽车上变频器的组成和功能 3.2.1、DC/DC升压转换器。 3.2.2、DC/DC降压转换器。 …

Java语言----二叉树

目录 一、二叉树 1.1 二叉树概念 1.2 两种特殊的二叉树 1.3二叉树的性质 二 、二叉树的实现 2.1第一种 使用数组 2.2第二种 使用链表实现 2.2.1二叉树代码构建 2.2.2二叉树的基本操作 三、二叉树的三种遍历 3.1递归方法实现 前、中、后遍历 3.2非递归方法实现 前、中…

Spark入门介绍

目录 一、Spark框架概述 1、Spark简介 2、发展 二、Spark功能及特点 1、定义

Kubernetes部署+kubesphere管理平台安装

Kubernetes官网&#xff1b;kubesphere官网 不论是Kubernetes官网还是找的其它部署步骤&#xff0c;基本都是推荐搭建集群的方式&#xff0c;是为了实现高可用.....等等&#xff0c;这样一来至少需要两台或三台的服务器来搭建&#xff0c;这样对我们的成本也是非常大的&#xf…

HCIA-MSTP替代技术之链路捆绑(手工模式)

目录 1&#xff0c;网络的可靠性需求 2&#xff0c;链路聚合原理 链路聚合&#xff1a; 聚合组(Link Aggregation Group&#xff0c;LAG)&#xff1a; 成员接口和成员链路&#xff1a; 活动接口和活动链路&#xff1a; 非活动接口和非活动链路&#xff1a; 聚合模式&…