第一个错误的版本

二分查找的思想,目的是为了找到第一个isBadVersion为true的元素
如果isBadVersion(mid)为true,证明第一个错误的版本可在当前元素之前(包含当前元素)
如果isBadVersion(mid)为false,证明第一个错误的版本在当前元素之后(不包含当前元素)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* 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 left = 1,
right = n;
// left === right
// 目的是找到最先出现的isBadVersion为true
while (left < right) {
const mid = Math.floor((left + right) / 2);
if (isBadVersion(mid)) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
};
};
// 1 2 3 4 5
// false false false true true

本站由 ao 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。