【简单算法】32.第一个错误的版本

题目:

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

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

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

贡献者:
特别感谢 @jianchao.li.fighter 添加此问题并创建所有测试用例。

解题思路:

这道题目比较有意思,从表面上看肯定是用二分查找来计算,但是如何找到第一个错误的版本是个难点。用res记录下每次错误的版本。

类似于在一个已经排序好的数组中查找第一个比该数目小但最接近该数的值。此题目作为重点题目变形题目,平时需要多加练习。

代码如下:

int binarySearch(vector<int> & nums,int target){
        int l = 0;
        int r = nums.size() - 1;
        int res = -1;

        while(l <= r){
            int mid = (l + r)/2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] > target){
                r = mid - 1;
            }else{
                res = mid;
                l = mid + 1;
            }
        }

        cout<<res<<endl;

        return res;
    }

代码:

// Forward declaration of isBadVersion API.
bool isBadVersion(int version);

class Solution {
public:
    int firstBadVersion(int n) {
        int res = -1;
        int low = 1;
        int high = n;
        while (low <= high)
        {
            int mid = low + (high - low) / 2;
            if (isBadVersion(mid))
            {
                res = mid;
                high = mid - 1;
            }
            else
            {
                low = mid + 1;
            }
        }
        return res;
    }
};

原文地址:https://www.cnblogs.com/mikemeng/p/8987901.html

时间: 2024-11-03 17:01:14

【简单算法】32.第一个错误的版本的相关文章

【leetcode 简单】 第七十五题 第一个错误的版本

你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的. 假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本. 你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错.实现一个函数来查找第一个错误的版本.你应该尽量减少对调用 API 的次数. 示例: 给定 n = 5

LeetCode 278. 第一个错误的版本

你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的. 假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本. 你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错.实现一个函数来查找第一个错误的版本.你应该尽量减少对调用 API 的次数. 示例: 给定 n = 5

第一个错误的版本

你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的. 假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本. 你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错.实现一个函数来查找第一个错误的版本.你应该尽量减少对调用 API 的次数. 给定 n = 5,并且

leetcode 278 第一个错误的版本 (First Bad Version)

很简单的二分查找. 弱智一开始直接复制mid=(1+n)/2 结果TLE,愣是没发现错误. 以为方法错了. 然后复制别人代码,int溢出. // Forward declaration of isBadVersion API. bool isBadVersion(int version); class Solution { public: int firstBadVersion(int n) { if(isBadVersion(1)){ return 1; } int bg=1; int mid

278. 第一个错误的版本

1 // Forward declaration of isBadVersion API. 2 bool isBadVersion(int version); 3 4 class Solution 5 { 6 public: 7 int firstBadVersion(int n) 8 { 9 int l = 1,r = n; 10 while(l < r) 11 { 12 //防止溢出+long long 13 int mid = (long long)l + r >> 1; 14 i

74 第一个错误的代码版本

原题网址:https://www.lintcode.com/problem/first-bad-version/description 描述 代码库的版本号是从 1 到 n 的整数.某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错.请找出第一个错误的版本号. 你可以通过 isBadVersion 的接口来判断版本号 version 是否在单元测试中出错,具体接口详情和调用方法请见代码的注释部分. 请阅读上述代码,对于不同的语言获取正确的调用 isBadVersio

图的所有简单算法实现

包括邻接链表.有向无向图.带权图.增删顶点和边.查找.连通.DFS和BFS等.这只是一个最初版本,有些复杂的算法还没有实现. package structure; //图的邻接链表的节点 public class GraphListNode { private int vertex;//图的顶点 private int weight;//边的权重 private boolean visited;//是否访问过 //带权重图的节点 public GraphListNode(int vertex,i

Java密码学原型算法实现——第一部分:标准Hash算法

题注 从博客中看出来我是个比较钟爱Java的应用密码学研究者.虽然C在密码学中有不可替代的优势:速度快,但是,Java的可移植性使得开发人员可以很快地将代码移植到各个平台,这比C实现要方便的多.尤其是Android平台的出现,Java的应用也就越来越广.因此,我本人在密码学研究过程中实际上也在逐渐使用和封装一些知名的Java密码学库,主要是方便自己使用. Java JDK实际上自带了密码学库,支持几乎所有通用密码学原型的实现.然而,自带密码库有几个缺点:第一,由于版权问题,其并不支持全部的密码学

Windows核心编程之核心总结(第一章 错误处理)(2018.5.26)

前沿 学习Windows核心编程是步入Windows编程殿堂的必经之路,2018年寒假重温了计算机操作系统知识,前阵子又过学习Windows程序设计方面的基础,正所谓打铁要乘热,所以我又入了Windows核心编程的坑啦,哈哈~ 学习目标 每一章的学习都要明确一个目标,就是你学完这一章之后你能做些什么?好的,我们一步步来学习第一章节错误处理.以下是这一章节的学习目标:1.了解Windows函数的错误机制2.了解GetLastError和SetLastError函数的使用3.了解FormatMess