问题描述

假设你正在使用一个版本控制系统,每个版本都有一个唯一的版本号,版本号从 1 开始递增。

你有一个列表 versions,其中包含了从 1 到 n 的所有版本号。此外,还有一个特定的版本号 target,它也在列表 versions 中。

target 版本号之前的版本全部是正确的,而之后的版本全部是错误的。

现在,产品团队已经确定 target 版本是第一个错误的版本。

你需要找出 target 版本号。

你可以通过调用 isBadVersion 接口来判断一个版本是否是错误版本。isBadVersion(versions[i]) 返回 true,那么版本 versions[i] 是错误版本,否则它是一个正确的版本。

实现一个函数 findFirstBadVersion,找到第一个错误的版本。

解法一

解题思路:

你需要使用二分查找法来找到第一个错误的版本。因为错误的版本号是连续的,所以二分查找法是解决这个问题的最优解。

/** @lc app=leetcode.cn id=278 lang=javascript** [278] 第一个错误的版本*/// @lc code=start
function findFirstBadVersion(isBadVersion) {let left = 1, right = 1000000;while(left < right) {let mid = left + Math.floor((right - left) / 2);if(isBadVersion(mid)) {right = mid;} else {left = mid + 1;}}return left;
}
// @lc code=end