1、题目
2、实现
(1)思路
题目满足二分可分的性质,即第一个错误版本之前的版本都是正确的;第一个错误版本之后的所有版本都是错误的。因此,判断mid对应的版本是否为错误版本,然后调整二分搜索的区间即可。
(2)代码
/**
* 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 l = 1, r = n;
while(l < r) {
let mid = Math.floor(l + (r - l) / 2);
if(isBadVersion(mid)) {
// 如果mid是坏版本,那么target在mid之前
r = mid;
} else {
l = mid + 1;
}
}
return l;
};
};
3、参考
第一个错误的版本 - 第一个错误的版本 - 力扣(LeetCode)
【题外话】做了一些题目了,很有感触的就是自己太浮躁了,题目本身有时候很简单,但是题目的文字性描述太多了,这会打消我做题的积极性,其次就是没有耐心去看文字很多的题解,其实耐心的看完也没有想象中的name困难。我觉得对于代码,我还有“恐惧”之心,希望自己可以努力克服,加油!