All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0201_0300.s0278_first_bad_version.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0201_0300.s0278_first_bad_version;

// #Easy #Binary_Search #Interactive #Algorithm_I_Day_1_Binary_Search #Binary_Search_I_Day_5
// #Level_1_Day_7_Binary_Search #2022_07_06_Time_15_ms_(87.89%)_Space_39.3_MB_(85.40%)

/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */

/**
 * 278 - First Bad Version\.
 *
 * Easy
 *
 * 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.
 *
 * **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 
 *
 * **Constraints:**
 *
 * *   1 <= bad <= n <= 231 - 1
**/
public class Solution extends VersionControl {
    public Solution(int bad) {
        super(bad);
    }

    public int firstBadVersion(int n) {
        int start = 1;
        int end = n;
        while (start < end) {
            int mid = start + (end - start) / 2;
            if (isBadVersion(mid)) {
                end = mid;
            } else {
                start = mid + 1;
            }
        }
        return start;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy