LeetCode //C - 278. First Bad Version

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 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 < = b a d < = n < = 2 31 − 1 1 <= bad <= n <= 2^{31} - 1 1<=bad<=n<=2311

From: LeetCode
Link: 278. First Bad Version


Solution:

Ideas:

1. Initialize two pointers: Set left to 1 (the first version) and right to n (the last version).

2. Iterate until the search space is exhausted: Continue until left is less than or equal to right.

3. Check the middle version: Calculate the midpoint mid using (left + right) / 2 to avoid potential overflow.

4. Evaluate the mid version using isBadVersion(mid):

  • If true, it indicates that mid and possibly earlier versions could be bad. Set right to mid - 1 to focus on the left half (earlier versions).
  • If false, it means versions prior to mid are all good, so set left to mid + 1 to concentrate on the right half (later versions).

5. Determine the first bad version: When the loop ends, left will be the smallest version number that returned true for isBadVersion(), signifying the first bad version.

Code:
// The API isBadVersion is defined for you.
// bool isBadVersion(int version);

int firstBadVersion(int n) {
    int left = 1, right = n;
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (isBadVersion(mid)) {
            right = mid; // Look on the left side, including mid
        } else {
            left = mid + 1; // Look on the right side, excluding mid
        }
    }
    return left; // When left == right, we've found the first bad version
}

相关推荐

  1. ctfshow web入门 php反序列化 web275--web278(无web276

    2024-04-07 01:38:01       32 阅读
  2. HDOJ 2078

    2024-04-07 01:38:01       38 阅读
  3. Leetcode274

    2024-04-07 01:38:01       31 阅读
  4. 面试经典150题(27-28)

    2024-04-07 01:38:01       57 阅读
  5. LeetCode //C - 278. First Bad Version

    2024-04-07 01:38:01       40 阅读
  6. 【LeetCode】258. 各位相加

    2024-04-07 01:38:01       61 阅读
  7. LeetCode258. Add Digits

    2024-04-07 01:38:01       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 01:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 01:38:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 01:38:01       82 阅读
  4. Python语言-面向对象

    2024-04-07 01:38:01       91 阅读

热门阅读

  1. C++ vector

    2024-04-07 01:38:01       40 阅读
  2. UD浏览器多线程支持的设置

    2024-04-07 01:38:01       31 阅读
  3. vuex和pinia

    2024-04-07 01:38:01       38 阅读
  4. OpenJudge - 22:紧急措施

    2024-04-07 01:38:01       41 阅读
  5. 对钱的认知篇-一个人有三个钱包

    2024-04-07 01:38:01       70 阅读
  6. 【TypeScript系列】tsconfig.json

    2024-04-07 01:38:01       66 阅读
  7. flex:1的作用是什么?

    2024-04-07 01:38:01       28 阅读
  8. Linux大文件分割小文件

    2024-04-07 01:38:01       40 阅读
  9. Linux C指针以及指针在Linux内核中的应用

    2024-04-07 01:38:01       34 阅读