/** * 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 beg = 1, end = n, gap = 0 while (beg < end) { if (gap == end - beg) break gap = end - beg let mid = Math.round((beg + end) / 2) let isBad = isBadVersion(mid) if (isBad) end = mid else if (!isBad) beg = mid + 1 } if (isBadVersion(beg)) return beg return end } }