-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathfirst-bad-version.js
More file actions
39 lines (35 loc) · 908 Bytes
/
first-bad-version.js
File metadata and controls
39 lines (35 loc) · 908 Bytes
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
39
/**
* 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) {
if (n === 1) {
return isBadVersion(1) ? 1 : 0;
}
return solutionHelper(isBadVersion, 1, n);
};
};
function solutionHelper(isBadVersion, start, end) {
var mid = Math.ceil((start + end) / 2);
if (isBadVersion(mid) && !isBadVersion(mid - 1)) {
return mid;
} else if (isBadVersion(mid)) {
return solutionHelper(isBadVersion, start, mid - 1);
} else {
return solutionHelper(isBadVersion, mid + 1, end);
}
}