잘못된 버전의 LeetCode 0278. 첫 번째 잘못된 버전 [쉬운] [파이썬] [반]
문제
당신은 제품 관리자이며, 현재 새로운 제품을 개발하는 팀을 이끌고. 불행하게도, 제품의 최신 버전은 품질 검사를 실패합니다. 각 버전은 이전 버전을 기반으로 개발되어 있기 때문에, 나쁜 버전 이후의 모든 버전도 엉망이다.
가정, 당신은 n
버전을 [1, 2, ..., n]
당신은 다음의 모든 사람이 나쁜 원인 첫 번째 나쁜 일을 찾아 할 수 있습니다.
당신은 API 부여 bool isBadVersion(version)
여부를 반환합니다 version
나쁜입니다. 첫 번째 잘못된 버전을 찾을 수있는 기능을 구현합니다. 당신은 API 호출의 수를 최소화해야한다.
예:
Given n = 5, and version = 4 is the first bad version.
call isBadVersion(3) -> false
call isBadVersion(5) -> true
call isBadVersion(4) -> true
Then 4 is the first bad version.
문제
당신은 그가 현재 새로운 제품을 개발하기 위해 팀을 선도하고, 제품 관리자입니다. 불행하게도, 제품의 최신 버전은 품질 검사를 통과하지 않았다. 각 버전의 개발의 이전 버전을 기반으로하기 때문에, 그래서 잘못된 버전의 모든 이후 버전이 잘못되었습니다.
당신이 N 버전이 있다고 가정 [1, 2, ..., n]
하면 버전 오류 후 잘못된 버전으로 먼저 리드의 발견 싶어.
당신은 호출 할 수있는 bool isBadVersion(version)
인터페이스의 버전 번호를 확인하는 version
단위 테스트에서 오류를. 첫 번째 잘못된 버전을 찾을 수있는 기능을 구현합니다. 당신은 API 호출의 수를 줄이기 위해 시도해야합니다.
예 :
给定 n = 5,并且 version = 4 是第一个错误的版本。
调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true
所以,4 是第一个错误的版本。
사고
이진 검색
因为版本是从 1 到 n,所以 low 初值设为 1,high 初值设为 n。
시간 복잡도 : O (logN)
복잡성 공간 : O (1).
파이썬 코드
# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):
class Solution(object):
def firstBadVersion(self, n):
"""
:type n: int
:rtype: int
"""
low, high = 1, n # 1-n
while low <= high:
mid = int((low + high) / 2)
if isBadVersion(mid) == False:
low = mid + 1
else:
high = mid - 1
return low