1. /**
    2. * leetcode#278 第一个错误的版本
    3. *
    4. * 给定 n = 5,并且 version = 4 是第一个错误的版本。
    5. * 你是产品经理,目前正在带领一个团队开发新的产品。
    6. *
    7. * 不幸的是,你的产品的最新版本没有通过质量检测。
    8. *
    9. * 由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
    10. *
    11. * 假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。
    12. *
    13. * 你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。
    14. *
    15. * 实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
    16. *
    17. * *调用 isBadVersion(3) -> false
    18. * *调用 isBadVersion(5) -> true
    19. * *调用 isBadVersion(4) -> true
    20. * *所以,4 是第一个错误的版本
    21. *
    22. * **/
    23. function firstBadVersion(n) {
    24. let l = 1, h = n;
    25. while (l <= h) {
    26. let m = Math.floor((l + h) / 2);
    27. if (!isBadVersion(m)) {
    28. l = m + 1
    29. } else {
    30. h = m - 1
    31. }
    32. }
    33. return l
    34. }