278.first-bad-version.js 722 B

123456789101112131415161718192021222324252627282930313233
  1. /**
  2. * Definition for isBadVersion()
  3. *
  4. * @param {integer} version number
  5. * @return {boolean} whether the version is bad
  6. * isBadVersion = function(version) {
  7. * ...
  8. * };
  9. */
  10. /**
  11. * @param {function} isBadVersion()
  12. * @return {function}
  13. */
  14. var solution = function(isBadVersion) {
  15. /**
  16. * @param {integer} n Total versions
  17. * @return {integer} The first bad version
  18. */
  19. return function(n) {
  20. let beg = 1, end = n, gap = 0
  21. while (beg < end) {
  22. if (gap == end - beg) break
  23. gap = end - beg
  24. let mid = Math.round((beg + end) / 2)
  25. let isBad = isBadVersion(mid)
  26. if (isBad) end = mid
  27. else if (!isBad) beg = mid + 1
  28. }
  29. if (isBadVersion(beg)) return beg
  30. return end
  31. }
  32. }