# 278. First Bad Version

### Leetcode

<https://leetcode.com/problems/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 returns whether `version` is bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.

&#x20;

**Example 1:**

```
Input: n = 5, bad = 4
Output: 4
Explanation:
call isBadVersion(3) -> false
call isBadVersion(5) -> true
call isBadVersion(4) -> true
Then 4 is the first bad version.
```

**Example 2:**

```
Input: n = 1, bad = 1
Output: 1
```

### 解答 <a href="#ti-jie" id="ti-jie"></a>

* **方法一**

```
/**
 * Definition for isBadVersion()
 * 
 * @param {integer} version number
 * @return {boolean} whether the version is bad
 * isBadVersion = function(version) {
 *     ...
 * };
 */

/**
 * @param {function} isBadVersion()
 * @return {function}
 */
var solution = function(isBadVersion) {
    /**
     * @param {integer} n Total versions
     * @return {integer} The first bad version
     */
    return function(n) {
        let start = 1;
        let end = n;
        while (start < end) {
            const version = Math.floor((start + end) / 2);
            if(isBadVersion(version)) {
                 end = version;
            } else {
                 start = version + 1;
            }
        }
        return start;
    };
};
```

Runtime: 68 ms, faster than 87.81% of JavaScript online submissions for First Bad Version.

Memory Usage: 38.8 MB, less than 30.83% of JavaScript online submissions for First Bad Version.

### 測資

```
let n = 5, bad = 4; // 4
```
