刷题专栏(十八):第一个错误的版本

简介: 刷题专栏(十八):第一个错误的版本

前言

刷题专栏到目前已经是第十八篇了,欢迎大家来关注我的刷题专栏,一起来刷题。

今天的这道题《第一个错误的版本》中,主要是考察二分法的使用。

关于二分法,之前的文章中也有所介绍,大家如果有兴趣可以自行去看一下。

下面我们就一起来看一下吧。

image.png

算法题:第一个错误的版本

这道题的描述好长,读起来也并不好理解。

其实就是要在多个版本中,获取第一个错误的版本。

首先是错误的版本的概念,一旦出现错误时,就一直有错误版本。

所以在第一个错误版本出现后,后续的版本就都是错误的。

其实是可以把这个概念转换一下,替代成一个连续的整数数组,然后获取某个具体的整数值,也就更好理解了。

由此可见,我们是可以通过遍历来处理这个情况的。

但是遍历一般都会使用更多的性能,在这种情况下,使用更多的是二分法。

下面我们就来看一下代码是如何写的。

代码展示

代码通过二分法,来进行区间的缩小。

/* The isBadVersion API is defined in the parent class VersionControl.
      boolean isBadVersion(int version); */
public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        int left = 1, right = n;
        while (left < right) {
            int m = left + (right - left) / 2; 
            if (isBadVersion(m)) {
                right = m; 
            } else {
                left = m + 1; 
            }
        }
        return left;
    }
}

代码执行结果

运行11ms,竟然还能击败这么的大哥,着实没想到。

不过这内存消耗明显差了些。

image.png

总结

二分法的使用,通常用于获取某个区间内的一个数值,或者是集合中的某个元素。

通常会比直接遍历要快得多,所以在不确定区间数值中获取对应元素时,还是比较推荐二分法来处理。

目录
相关文章
|
算法 测试技术
大厂面试真题:第一个错误的代码版本
大厂面试真题:第一个错误的代码版本
大厂面试真题:第一个错误的代码版本
|
机器学习/深度学习 算法 Java
算法宝典2——Java版本(此系列持续更新,这篇文章目前3道)(有题目的跳转链接)(此份宝典包含了二叉树的算法题)
算法宝典2——Java版本(此系列持续更新,这篇文章目前3道)(有题目的跳转链接)(此份宝典包含了二叉树的算法题)
|
算法 Java 测试技术
LeetCode刷题278-简单-第一个错误版本
LeetCode刷题278-简单-第一个错误版本
161 0
LeetCode刷题278-简单-第一个错误版本
|
存储 算法 Java
算法宝典1——Java版本(此系列持续更新,这篇文章有20道)(有题目的跳转链接)(此份宝典包含了链表、栈、队列、二叉树的算法题)(下)
算法宝典1——Java版本(此系列持续更新,这篇文章有20道)(有题目的跳转链接)(此份宝典包含了链表、栈、队列、二叉树的算法题)(下)
|
算法 Java 索引
算法宝典1——Java版本(此系列持续更新,这篇文章有20道)(有题目的跳转链接)(此份宝典包含了链表、栈、队列、二叉树的算法题)(上)
算法宝典1——Java版本(此系列持续更新,这篇文章有20道)(有题目的跳转链接)(此份宝典包含了链表、栈、队列、二叉树的算法题)
|
算法 测试技术 API
​LeetCode刷题实战278:第一个错误的版本
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
118 0
|
网络协议 安全 算法
大网进阶安全刷题讲解(带答案)(1)(上)
大网进阶安全刷题讲解(带答案)(1)
100 0
|
网络协议 安全 算法
大网进阶安全刷题讲解(带答案)(1)(下)
大网进阶安全刷题讲解(带答案)(1)
123 0
|
9月前
|
存储 开发工具 文件存储
Python的核心知识点整理大全66(已完结撒花)
Python的核心知识点整理大全66(已完结撒花)
157 4
20天 算法刷题计划-第一个错误的版本
分析题意可知,版本号是一个递增的序列,并且无重复元素,满足二分查找的思路,本题给出了判断版本是否出错的方法 isBadVersion(Version),我们可以通过isBadversion()方法作为判断。首先确定中间版本位置,取中间版本mid = left + (right - left) / 2; 如果中间版本错误,那么第一次发生错误可能在[1,mid]区间,在此区间继续二分法查找, 如果中间版本没有错误,那么第一次发生错误可能在[mid+1,n]区间,在此区间查找.

热门文章

最新文章