[LC][array][Binary Search] 278. First Bad Version
来源:互联网 发布:埃摩森猎头公司 知乎 编辑:程序博客网 时间:2024/06/14 15:12
一、问题描述
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.
二、解法
九章上说这个问题可以转化为二分搜索来做。假设暴力搜索,复杂度为O(n),但是过不了。比O(n)更好的基本只有O(logn),每次把问题规模缩小一半。
假设k是第一个bad version,那么记1.....k-1为O, 记k ..... n为X。所以问题变成了求第一个X。套用二分搜索的模版:每次判断中点是什么。如果是O搜后半部分,是X搜前半部分。
public class Solution extends VersionControl { public int firstBadVersion(int n) { if(n < 1){ return 0; } int start = 0, end = n; while(start + 1 < end){ int mid = start + (end - start)/2; if(isBadVersion(mid)){ end = mid; } else{ start = mid; } } if(isBadVersion(start)){ return start; } else{ return end; } }}
三、总结与反思
1. 看到暴力是O(n),基本就是要努力把问题转化为二分
2. 二分的各个条件怎么变会怎么样要搞明白(看lecture2笔记)
- [LC][array][Binary Search] 278. First Bad Version
- [leetcode][Binary Search] First Bad Version
- leetcode :Binary Search:First Bad Version(278)
- Binary search(1) -- First Bad Version, Arranging Coins
- LeetCode-Easy部分中标签为 Binary Search 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- 278. First Bad Version
- linux平台下的写文件刷新
- “QCoreApplication::applicationDirPath: Please instantiate the QApplication object first”问题
- 设计模式之——策略模式
- 中文乱码处理
- 数据结构学习日志--排序算法
- [LC][array][Binary Search] 278. First Bad Version
- [C/C++]OJ练习题:Z字形扫描(Zigzag Scan) 更好的解题思路
- win32开发(自定义消息)
- echarts基础应用
- LINUX-进程间通信(三、共享存储)
- Ubuntu 16.04 配置PHP+Apache2
- SQL反模式(前言)
- VMware下安装CentOs 7(下)
- 2017年编程的开始