九章算法官网-原文网址
http://www.jiuzhang.com/problem/53/
题目
在早期的svn代码控制器中,代码版本的编号是从1开始累加的。有一天你提交了一个带BUG的代码到代码库中,使得这个版本上的单元测试(Unit Tests)失败了。而正不巧由于为此代码库贡献代码的每个人的工作都比较独立,你又休假去了,于是没有人去修复这个bug,这导致了从某个版本开始,后面的每个版本的单元测试都无法通过。假如说现在的代码版本号已经到了n。请找出第一个出错的代码版本(也就是你提交的那个有BUG的版本)。
你可以调用一个函数isBadVersion(id)去测试版本号id是否是一个可以通过Unit Tests的好版本。你的算法应该尽量少的调用isBadVersion这个函数。
在线测试本题
http://lintcode.com/problem/first-bad-version/
解答
采用简单的二分法可以解决。
Python 代码:
start, end = 1, n
while start + 1 < end:
mid = (start + end) / 2
if isBadVersion(mid):
end = mid
else:
start = mid + 1
if isBadVersion(start):
return start
return end
时间: 2024-10-11 07:31:47