There is a bug in your code. You’re not certain which commit number introduced the bug into the repo, but you know for certain an earlier commit number where it didn’t exist yet. A magical function, isBad(), determines if the commit is bad or not.
func isBad(commit: Int) -> Bool
Given isBad, determine which commit introduced the bug.
For n commits, this can be solved with a binary search in O(log n). Careful not to make an off-by-one mistake and return the bad commit rather than the commit preceding it.
func badCommit(pastCommit: Int, currentCommit: Int) -> Int {
var left = pastCommit
var right = currentCommit
var mid = (left + right) / 2
while (left < right) {
if !isBad(commit: mid) {
left = mid + 1
}
else {
right = mid
}
mid = (left + right) / 2
}
return right
}
badCommit(pastCommit: 110, currentCommit: 334)