leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

first_bad_version.c (1051B)


// 278. First Bad Version
#include "leetcode.h"

/*
 * you are a product manager and currently leading a team to develop a new
 * product. unfortunately, the latest version of your product fails the quality
 * check. since each version is developed based on the previous version, all the
 * versions after a bad version are also bad. suppose you have 'n' versions '[1,
 * ,2, ..., n]' and you want to find out the first bad one, which causes all the
 * following ones to be bad. you are given an api 'bool isBadVersion(version)'
 * which returns whether 'version' is bad. implement a function to find the
 * first bad version. you should minimise the number of calls to the api.
 */

bool isBadVersion(int version);

int firstBadVersion(int n) {
  int start = 0, end = n;
  while (end - start > 1) {
    int mid = start + (end - start) / 2;
    if (isBadVersion(mid))
      end = mid;
    else
      start = mid;
  }
  return end;
}

int main() {
  printf("%d\n", firstBadVersion(5)); // expect: 4
  printf("%d\n", firstBadVersion(1)); // expect: 1
}