LeetCode | 잘못된 버전의 0278. 첫 번째 잘못된 버전 [파이썬]

잘못된 버전의 LeetCode 0278. 첫 번째 잘못된 버전 [쉬운] [파이썬] [반]

문제

LeetCode

당신은 제품 관리자이며, 현재 새로운 제품을 개발하는 팀을 이끌고. 불행하게도, 제품의 최신 버전은 품질 검사를 실패합니다. 각 버전은 이전 버전을 기반으로 개발되어 있기 때문에, 나쁜 버전 이후의 모든 버전도 엉망이다.

가정, 당신은 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

코드 주소

GitHub의 링크

게시 된 312 개 원래 기사 · 원 찬양 (402) ·은 25 만 + 조회수

추천

출처blog.csdn.net/Wonz5130/article/details/104450409