278. First Bad Version(二分查找)

You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad version are also bad.

Suppose you have n versions [1, 2, ..., n] and you want to find out the first bad one, which causes all the following ones to be bad.

You are given an API bool isBadVersion(version) which will return whether version is bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.

Example:

Given n = 5, and version = 4 is the first bad version.

call isBadVersion(3) -> false
call isBadVersion(5) -> true
call isBadVersion(4) -> true

Then 4 is the first bad version. 

 1 bool isBadVersion(int version);
 2
 3 class Solution {
 4 public:
 5     int firstBadVersion(int n) {
 6         int low = 1;
 7         int high = n;
 8         int res = 0;
 9         while(low < high) {
10             int mid = low + (high - low) / 2;
11             if(isBadVersion(mid)) {
12                 high = mid;
13             } else {
14                 low = mid+1;
15             }
16         }
17         return high;
18     }
19 };
 

原文地址:https://www.cnblogs.com/zle1992/p/12578531.html

时间: 2024-10-11 05:43:39

278. First Bad Version(二分查找)的相关文章

Leetcode 278 First Bad Version 二分查找

题意:找到第一个出问题的版本 二分查找,注意 mid = l + (r - l + 1) / 2;因为整数会溢出 1 // Forward declaration of isBadVersion API. 2 bool isBadVersion(int version); 3 4 class Solution { 5 public: 6 int firstBadVersion(int n) { 7 int l = 1, r = n , ans ; 8 while(l <= r){ 9 int m

278. First Bad Version 折半查找,分治法

You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad ve

Leetcode题解——算法思想之二分查找

1. 求开方 2. 大于给定元素的最小元素 3. 有序数组的 Single Element 4. 第一个错误的版本 5. 旋转数组的最小数字 6. 查找区间 正常实现 Input : [1,2,3,4,5] key : 3 return the index : 2 public int binarySearch(int[] nums, int key) { int l = 0, h = nums.length - 1; while (l <= h) { int m = l + (h - l) /

二分查找总结

最近刷leetcode和lintcode,做到二分查找的部分,发现其实这种类型的题目很有规律,题目大致的分为以下几类: 1.最基础的二分查找题目,在一个有序的数组当中查找某个数,如果找到,则返回这个数在数组中的下标,如果没有找到就返回-1或者是它将会被按顺序插入的位置.这种题目继续进阶一下就是在有序数组中查找元素的上下限.继续做可以求两个区间的交集. 2.旋转数组问题,就是将一个有序数组进行旋转,然后在数组中查找某个值,其中分为数组中有重复元素和没有重复元素两种情况. 3.在杨氏矩阵中利用二分查

River Hopscotch-[二分查找、贪心]

Description Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully jumping from rock to rock in a river. The excitement takes place on a long, straight river with a rock at the start and another rock at th

二分查找方法

问题描述: 二分查找指定的int数组 问题分析: 时间复杂度为O(logN) 代码实现: package c02; /**  * @project: DataStructureAndAlgorithmAnalysis  * @filename: BinarySearch  * @version: 0.10  * @author: Jimmy Han  * @date: 22:57 2015/7/7  * @comment: Test Purpose  * @result:  */ public 

【bzoj4012】[HNOI2015]开店 动态树分治+二分查找

题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非常好啦,但是她们也发现她们面临着一个问题,那就是店开在哪里,面向什么样的人群.很神奇的是,幻想乡的地图是一个树形结构,幻想乡一共有 n个地方,编号为 1 到 n,被 n-1 条带权的边连接起来.每个地方都住着一个妖怪,其中第 i 个地方的妖怪年龄是 x_i.妖怪都是些比较喜欢安静的家伙,所以它们并不希望和很多妖怪相邻.所以这个树所有顶点的

Java集合中二分查找算法实现

Arrays.binarySearch实现了对有序数组特定区间的二分查找,虽然我们觉得很简单,但是阅读源码的确能看到实现这些库的优秀技巧,总是在追求完美和高效. 值得学习的地方有: (1)边界检查: (2)求中位数的时候使用位移操作,而不是 x/2; (3)如果查找的元素不在数组中,通过返回值昭示了应该插入的位置,而不是直接返回-1: public static int binarySearch(int[] a, int fromIndex, int toIndex, int key) { ra

【算法】二分查找与暴力查找(白名单过滤)

二分查找与暴力查找. 如果可能,我们的测试用例都会通过模拟实际情况来展示当前算法的必要性.这里该过程被称为白名单过滤.具体来说,可以想象一家信用卡公司,它需要检查客户的交易账号是否有效.为此,它需要: 将客户的账号保存在一个文件中,我们称它为白名单: 从标准输入中得到每笔交易的账号: 使用这个测试用例在标准输出中打印所有与任何客户无关的账号,公司很可能拒绝此类交易. 在一家有上百万客户的大公司中,需要处理数百万甚至更多的交易都是很正常的.为了模拟这种情况,我们提供了文件largeW.txt(10