0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LeetCode初级算法-排序和搜索01:第一个错误的版本

电子设计 来源:电子设计 作者:电子设计 2020-12-10 22:22 次阅读

LeetCode初级算法--排序和搜索01:第一个错误的版本

一、引子

这是由LeetCode官方推出的的经典面试题目清单~
这个模块对应的是探索的初级算法~旨在帮助入门算法。我们第一遍刷的是leetcode推荐的题目。

二、题目

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

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

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

示例:

给定 n = 5,并且 version = 4 是第一个错误的版本。

调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true

所以,4 是第一个错误的版本。 

1、思路

首先我们可以想到的就是把整个列表都顺序遍历一遍,第一次调用接口出现False的下一个为True的就是我们要求的值,但是这个算法会超时。

我们使用二分查找:

我们要寻找第一个错误版本,也就是要保留最后一个false之后的第一个true。所以在更新边界的时候,右边界就不用减1了,这样最后当左右相等时一定是第一个true。

2、编程实现

python

# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):

class Solution:
    def firstBadVersion(self, n):
        """
        :type n: int
        :rtype: int
        """
        left = 1
        right = n
        while left
本文由博客一文多发平台 OpenWrite 发布!

审核编辑 黄昊宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1797

    文章

    47867

    浏览量

    240858
  • 机器学习
    +关注

    关注

    66

    文章

    8453

    浏览量

    133166
  • 深度学习
    +关注

    关注

    73

    文章

    5521

    浏览量

    121663
  • leetcode
    +关注

    关注

    0

    文章

    20

    浏览量

    2349
收藏 人收藏

    评论

    相关推荐

    ADS1274用DRDY+TDM输出模式下,读到的第一个字节是无效的,为什么?

    今天调试中发现问题,1274在用DRDY+TDM输出模式下,读到的第一个字节是无效的! 配置是4通道,在DRDY下降沿产生后,等待5us(采样率25K,即间隔40us)给出SPI的SCLK
    发表于 01-08 08:17

    TimSort:在标准函数库中广泛使用的排序算法

    排序算法呢? 本文将带你走进 TimSort,在标准函数库中广泛使用的排序算法。 这个
    的头像 发表于 01-03 11:42 147次阅读

    ADS1299在DAISY-CHAIN模式下只能配置第一个AD吗,那后面几个都是要怎么配置寄存器,都和第一个样吗?

    大家: 1ADS1299在DAISY-CHAIN 模式下只能配置第一个AD么,那后面几个都是要怎么配置寄存器,都和第一个样么? 2 手册上写了有关时钟配置的问题,ADS1299在
    发表于 12-20 06:47

    ADS1194标识芯片的第一个只读寄存器读取数据数据错误,为什么?

    采用ADS1194,MCUSTM32L4系列. 问题描述如下: 1. 标识芯片的第一个只读寄存器读取数据数据错误 2. 读取的数据每一个通道多了一个字节,把多出的字节去掉后位正确
    发表于 12-03 06:59

    ADS127L01读取ADC数据时DOUT在DRDY拉低之前或第一个SCLK到来之前就已经开始切换,为什么?

    如下图,采用SPI模式配置完之后读取ADC数据时,CS信号持续拉低;在下一个数据帧的第一个SCLK来临之前DOUT就已经开始切换(此时DRDY还未拉低),请问什么原因可能导致这样的结果?
    发表于 11-15 08:29

    LMK1C1104第一个cycle在CLKOUT中丢失,为什么?

    LMK1C1104: CLKIN的第一个cycle在CLKOUT中丢失,详情请参照关联问题
    发表于 11-11 07:12

    时间复杂度为 O(n^2) 的排序算法

    , O(n2) 的排序算法可能会比 O(nlogn) 的排序算法执行效率高。不过随着数据规模增大, O(nlogn) 的排序
    的头像 发表于 10-19 16:31 1276次阅读
    时间复杂度为 O(n^2) 的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    SDK 0.9.4在函数中连续调用espconn_sent,只能看到第一个espconn_sent的数据,为什么?

    在 SDK 0.9.3 及更早版本中,如果我在函数中连续调用 espconn_sent,它将发送所有连接的数据。如果我在 0.9.4 中执行相同的操作,我只能看到第一个espconn_sent的数据
    发表于 07-18 08:24

    与屏幕起发送的第一个UART数据时出现初始崩溃,但仅在第一次闪存时出现,为什么?

    =0x00000000, depc=0x0 000000 ets 2013-01-8,第一个原因:2,开机模式:(1,7) ets 2013-01-8,第一个原因:4,开机模式:(
    发表于 07-09 07:39

    手把手教你排序算法怎么写

    今天以直接插入排序算法,给大家分享一下排序算法的实现思路,主要包含以下部分内容:插入排序介绍插入排序
    的头像 发表于 06-04 08:03 800次阅读
    手把手教你<b class='flag-5'>排序</b><b class='flag-5'>算法</b>怎么写

    读取寄存器的值,第一个bit读取不到是为什么?

    遇到以下的问题,读取寄存器中的值,查看寄存器是“0x80000e23”,但是读取之后第一个位没有读取到,只读取到“0xe23”,用来接收寄存器的值的变量类型是(volatile uint32)
    发表于 05-28 06:04

    用FPGA实现双调排序的方法(2)

    典型的排序算法包括冒泡排序、选择排序、插入排序、归并排序、快速
    的头像 发表于 03-21 10:28 710次阅读
    用FPGA实现双调<b class='flag-5'>排序</b>的方法(2)

    求助,用CubeMX配置占空比30%的PWM输出第一个波形不准确是为什么?

    我用的是G0的芯片配置,通过抓波发现第一个波形永远与我配置的占空比不准确,但是除了第一个周期不准确外,后面的都没问题。
    发表于 03-18 07:55

    FPGA实现双调排序算法的探索与实践

    双调排序(BitonicSort)是数据独立(Data-independent)的排序算法,即比较顺序与数据无关,特别适合并行执行。在了解双调排序
    发表于 03-14 09:50 726次阅读
    FPGA实现双调<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的探索与实践

    C语言实现经典排序算法概览

    冒泡排序(英语:Bubble Sort)是种简单的排序算法。它重复地走访过要排序的数列,次比
    的头像 发表于 02-25 12:27 495次阅读
    C语言实现经典<b class='flag-5'>排序</b><b class='flag-5'>算法</b>概览