华为OD机试 - 第一个错误的版本(Java)

news2024/11/16 18:00:11

在这里插入图片描述

一、题目描述

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

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

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

二、输入描述

n = 5, bad = 4

三、输出描述

4

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

四、思路及算法

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

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

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

五、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)。我们只需要常数的空间保存若干变量。


🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

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

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

相关文章

【seata的部署和集成】

seata的部署和集成 seata的部署和集成一、部署Seata的tc-server1.下载2.解压3.修改配置4.在nacos添加配置5.创建数据库表6.启动TC服务 二、微服务集成seata1.引入依赖2.修改配置文件 三、TC服务的高可用和异地容灾1.模拟异地容灾的TC集群2.将事务组映射配置到nacos3.微服务读取…

应用在虚机和容器场景下如何优雅上下线

在生产场景中部署的服务提供者常因业务升级或其他场景需要下线和上线的部署操作&#xff0c;本文总结了应用在上下线过程中会遇到的典型问题&#xff0c;并思考在虚机和容器场景该如何处理这些问题&#xff0c;规避该过程中可能出现的服务消费者的请求失败&#xff0c;实现应用…

人工智能学习07--pytorch16--MobileNet网络详解

MobileNet详解 DW卷积&#xff1a; 每个卷积核的深度为1&#xff0c;而不是像之前一样等于特征矩阵的深度。 每个卷积核只负责输入特征矩阵的一个channel进行卷积运算&#xff0c;再得到相应的输出矩阵的一个channel。 因为每个卷积核只负责一个channel&#xff0c;则采用的特征…

Android WebView 的 addJavascriptInterface 探究

Android WebView 的 addJavascriptInterface 探究 一、前言 Java和JS交互的方式有多种,这里探讨的方式是通过以下方式进行的交互。 webView.addJavascriptInterface(this, "JSBridge") 这篇文章是想弄明白 JavaScript 和 Java是如何实现这种方式互调的,就从源码…

C高级 day1

初始工作路径不在家目录下&#xff0c;在不切换路径的情况下&#xff0c;在家目录下创建一个subdir目录&#xff0c;在subdir这个目录下&#xff0c;创建subdir1和subdir2&#xff0c;并且把/etc/passwd拷贝到subdir1中&#xff0c;把/etc/group文件拷贝到subdir2中&#xff0c…

java获取登陆用户ip方法

今天和大家分享一下获取登录用户 ip的方法&#xff0c;如果你想获取自己的登陆用户 ip&#xff0c;可以参考以下思路&#xff1a; 1.可以通过 Java动态链接库的方式获取到&#xff0c;方法很简单&#xff0c;就是把需要的 ip地址添加到动态链接库中&#xff0c;然后在需要用到时…

Word三线表创建

三线表是论文写作中经常使用到的表格格式 自定义三线表 “插入”-->“表格”&#xff0c;随便插入一个表格&#xff0c;然后将光标移动到表格内 “表设计”-->“其他”-->“新建表格样式” 修改模板名称为“三线表”&#xff0c;方便下次直接套用 首先设置标题行【…

把苹果全家桶用于VR全身追踪是什么体验

此前&#xff0c;青亭网曾报道了一项无需摄像头的VR全身追踪方案&#xff1a;Standable: Full Body Estimation&#xff08;简称SFBE&#xff09;&#xff0c;这套方案就是利用了头显双手柄数据来模拟预测全身动作数据&#xff0c;效果还算不错。 近期在CHI2023活动上&#xff…

深度学习02-神经网络(MLP多层感知器)

文章目录 神经网络简介学习路径分类 多层感知器&#xff08;MLP&#xff09;神经网络认识两层神经网络输入层从输入层到隐藏层从隐藏层到输出层激活层输出的正规化如何衡量输出的好坏反向传播与参数优化过拟合 BP算法推导定义算法讲解前向传播反向传播 具体实例 tensorflow实战…

Python并发编程之进程理论

前言 本文将详细介绍进程相关概念。 进程和程序 计算机上的未运行的QQ、Wechat等都属于程序&#xff0c;但是一旦当这些程序运行起来的话&#xff0c;就可以被称为进程。因此可以如下定义程序和进程&#xff1a; 程序&#xff1a;就是存在硬盘上的一堆代码。 进程&#xf…

【AI】YOLOV1原理详解

1、简介 YOLO:You Only Look Once,一种对象检测算法,2016年由Redmon提出 优点:速度快,适合于实时检测任务; 缺点:准确度略低 2、其它算法对象检测原理 在YOLO出现之前,其它算法使用分类器对测试图像的不同切片进行评估。 例如,使用一个小窗口在图像上滑动来获取一小…

【标准化方法】(4) Weight Normalization 原理解析、代码复现,附Pytorch代码

今天和各位分享一下深度学习中常用的归一化方法&#xff0c;权重归一化&#xff08;Weight Normalization&#xff0c; WN&#xff09;&#xff0c;通过理论解析&#xff0c;用 Pytorch 复现一下代码。 Weight Normalization 的论文地址如下&#xff1a;https://arxiv.org/pdf…

GEE:基于主成分分析(PCA)的风险筛选环境指标(RSEI)计算方法

作者:CSDN @ _养乐多_ 利用主成分分析(Principal Component Analysis, PCA)进行风险筛选环境指标(Risk-Screening Environmental Indicators, RSEI)的计算是一种常用的方法。本文介绍了基于主成分分析的RSEI计算方法,通过将多个基于遥感指数的环境指标转化为少数几个主成…

电脑cpu占用率高?怎么办?1分钟快速解决!

案例&#xff1a;电脑cup过高怎么办&#xff1f; 【我的电脑运行缓慢&#xff0c;导致我学习和工作的效率很低。刚刚查看了一下电脑&#xff0c;发现它的cpu占用率很高。有没有小伙伴知道如何解决此电脑cpu过高的问题&#xff1f;】 电脑是我们生活中不可缺少的工具&#xff…

Linux 多线程(1)线程概念与线程控制

多线程&#xff1a;概念、线程控制&#xff08;创建、终止、等待、分离&#xff09;&#xff0c;线程安全&#xff08;问题&实现&#xff09;&#xff0c;应用&#xff08;生产者与消费者模型&#xff0c;线程池&#xff0c;单例模式&#xff09; &#xff08;重要&#xf…

linux系统(进程间通信)06_IPC概念,pipe管道,fifo通信,mmap 共享映射区

01 学习目标 1.熟练使用pipe进行父子进程间通信 2.熟练使用pipe进行兄弟进程间通信 3.熟练使用fifo进行无血缘关系的进程间通信 4.熟练掌握mmap函数的使用 5.掌握mmap创建匿名映射区的方法 6.使用mmap进行有血缘关系的进程间通信 7.使用mmap进行无血缘关系的进程间通信 02 IPC概…

Netfilter和iptables命令详解,从入门到精通

本文目录 1、netfilter架构和工作原则简介2、iptables操作命令说明2.1 、Filtering Specifications2.2、Target Specifications2.3、一个基于Linux的基本的防火墙的配置例子 netfilter 是Linux内核里网络部分的一个重要框架&#xff0c;内核通过netfilter完成IP报文的一些操作。…

缓存雪崩问题

缓存雪崩&#xff1a;指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量的请求到达数据库&#xff0c;带来巨大的压力 解决方案&#xff1a; 1.给不同的key的TTL添加随机值 2.利用redis集群提高服务的可用性 3.给缓存业务添加降级限流策略 4.给业务添…

扫雷,咱就是一扫一大片(C语言完美递归版)

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C语言》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;希望可以…

零基础入门 Stable Diffusion - 无需显卡把 AI 绘画引擎搬进家用电脑

我从小特别羡慕会画画的伙伴。他们能够将心中的想法画出来&#xff0c;而我最高水平的肖像画是丁老头。但在接触 Stable Diffusion 之后&#xff0c;我感觉自己脱胎换骨&#xff0c;给自己贴上了「会画画」的新标签。 丁老头进化旅程 Stable Diffusion 是一个「文本到图像」的…