잘못된 버전의 LeetCode 번호 278 첫 번째 잘못된 버전

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

당신이 N 버전 [1, 2, ..., N]을 가지고 있고 다음의 모든 사람이 나쁜 원인 첫 번째 나쁜 하나를 발견 할 가정하자.

당신은 버전이 불량인지 여부를 반환하는 API의 부울 isBadVersion (버전)이 제공됩니다. 첫 번째 잘못된 버전을 찾을 수있는 기능을 구현합니다. 당신은 API 호출의 수를 최소화해야한다.

예 :

감안 N = 5 = 버전 및 4는 제 1 불량 버전이다.

전화 isBadVersion (3) -> 거짓
전화 isBadVersion (5) -> 실제
통화 isBadVersion (4) -> 사실

그리고도 4는 제 1 나쁜 버전입니다.

주제 설명 :
당신은, 제품 관리자입니다 현재 새로운 제품을 개발하기 위해 팀을 선도하고 있습니다. 불행하게도, 제품의 최신 버전은 품질 검사를 통과하지 않았다. 각 버전의 개발의 이전 버전을 기반으로하기 때문에, 그래서 잘못된 버전의 모든 이후 버전이 잘못되었습니다.

당신이 N 버전 [1, 2, ..., n]은, 당신이 버전 오류 후 잘못된 버전으로 먼저 리드의 발견하려는 있다고 가정합시다.

당신은 단위 테스트에 버전 번호 버전의 오류 여부를 결정하는 부울 isBadVersion (버전) 인터페이스를 호출 할 수 있습니다. 첫 번째 잘못된 버전을 찾을 수있는 기능을 구현합니다. 당신은 API 호출의 수를 줄이기 위해 시도해야합니다.

예 :

N 감안할 = 5, 그리고 첫 번째 버전은 = 4는 잘못된 버전입니다.

전화 isBadVersion (3) -> 거짓
통화 isBadVersion (5) -> 진정한
호출 isBadVersion (4) -> 사실

그래서 4는 제 1 잘못된 버전입니다.

아이디어 :
이진 검색, 경계 조건과 오버 플로우에주의
시간 복잡도 O (LGN), 공간 복잡도 O (1)

코드 :
C ++ :

// Forward declaration of isBadVersion API.
bool isBadVersion(int version);

class Solution {
public:
    int firstBadVersion(int n) {
        int low = 1;
        while (low < n) {
            int mid = low + ((n - low) >> 1);
            if (isBadVersion(mid)) n = mid;
            else low = ++mid;
        }
        return low;
    }
};

자바 :

/* The isBadVersion API is defined in the parent class VersionControl.
      boolean isBadVersion(int version); */

public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        int low = 1;
        while (low < n) {
            int mid = low + ((n - low) >> 1);
            if (isBadVersion(mid)) n = mid;
            else low = ++mid;
        }
        return low;
    }
}

파이썬 :

# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):

class Solution:
    def firstBadVersion(self, n):
        """
        :type n: int
        :rtype: int
        """
        low = 1
        while low < n:
            mid = low + ((n - low) >> 1)
            if isBadVersion(mid):
                n = mid
            else:
                low = mid + 1
        return low

추천

출처blog.csdn.net/weixin_33743248/article/details/91003083