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

news/2024/10/31 5:32:00/

在这里插入图片描述

一、题目描述

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

假设你有 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.ppmy.cn/news/62953.html

相关文章

如何学好单片机C语言并写出高质量代码

单片机C语言的学习需要掌握以下方面&#xff1a; C语言基础&#xff1a;需要学习C语言的基本语法、数据类型、运算符、控制语句等基础知识。 单片机基础&#xff1a;需要掌握单片机的基本结构、寄存器、输入输出等知识。 编程思想&#xff1a;需要掌握编程思想&#xff0c;如…

测试5年从中兴 15K 跳槽去腾讯 32K+16,啃完这份笔记你也可以

粉丝小王转行做测试已经是第5个年头&#xff0c;一直是一个不温不火的小职员&#xff0c;本本分分做着自己的事情&#xff0c;觉得自己的工作已经遇到了瓶颈&#xff0c;一个偶然的机会&#xff0c;获得了一份软件测试全栈知识点学习笔记&#xff0c;通过几个月的学习&#xff…

【递推专题】常见的递推“模型”总结

目录 1.斐波那契数列分析&#xff1a;代码&#xff1a; 2.平面分割问题分析&#xff1a; 3.汉诺塔问题分析&#xff1a; 4.卡特兰数分析&#xff1a; 5.第二类斯特林数总结&#xff1a; 1.斐波那契数列 分析&#xff1a; 斐波那契数列又称兔子数列&#xff0c;其原理来源于兔子…

记录--极致舒适的Vue页面保活方案

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 为了让页面保活更加稳定&#xff0c;你们是怎么做的&#xff1f; 我用一行配置实现了 Vue页面保活是指在用户离开当前页面后&#xff0c;可以在返回时恢复上一次浏览页面的状态。这种技术可以让用户享…

信息安全从业人员职业规划(甲方乙方分别说明)

职业类型 信息安全咨询师 信息安全测评师 信息安全服务人员 信息安全运维人员 信息安全方案架构师 安全产品开发工程师 安全策略工程师 培训讲师 漏洞挖据 攻防测试 信息安全管理岗(甲) 目标:以服务自己为主,在企业内部地位还可以 安全体系管理员 大型企业安全体系化建设,有时…

100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图、三维散点图、散点图矩阵)

文章目录 专栏导读0. 前言1. 参数说明2. 两主特征:二维散点图1)普通散点图2)文字标签散点图3)带颜色映射的散点图4)ArcGIS散点图5)

第八章 使用Apache服务部署静态网站

文章目录 第八章 使用Apache服务部署静态网站一、网站服务程序1、网站服务介绍2、Apache程序介绍 二、配置服务文件参数1、Linux系统中的配置文件2、配置httpd服务程序时最常用的参数以及用途描述 三、SELinux安全子系统1、SELinux介绍2、SELinux服务配置模式3、Semanage命令4、…

mysql 基线加固/等保整改

PS&#xff1a;高版本的mysql可能不适用本文 1 修改DBA登录密码 首次修改&#xff0c;在shell环境下执行mysqladmin -u root password&#xff0c;连续输入两次新密码非首次修改&#xff0c;在shell环境下执行mysqladmin -u root password -p 原密码&#xff0c;连续输入两次…