问题描述
假设你正在使用一个版本控制系统,每个版本都有一个唯一的版本号,版本号从 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