-278의 Leetcode 주제 이분법. 첫 번째 잘못된 버전 (첫 번째 잘못된 버전)
당신은 그가 현재 새로운 제품을 개발하기 위해 팀을 선도하고, 제품 관리자입니다. 불행하게도, 제품의 최신 버전은 품질 검사를 통과하지 않았다. 각 버전의 개발의 이전 버전을 기반으로하기 때문에, 그래서 잘못된 버전의 모든 이후 버전이 잘못되었습니다.
당신이 가정 n
버전 [1, 2, ..., n]
은 버전 오류 후 잘못된 버전으로 먼저 리드 밖으로 찾고 싶어요.
당신은 호출 할 수있는 bool isBadVersion(version)
인터페이스의 버전 번호를 확인하는 version
단위 테스트에서 오류를. 첫 번째 잘못된 버전을 찾을 수있는 기능을 구현합니다. 당신은 API 호출의 수를 줄이기 위해 시도해야합니다.
예 :
N 감안할 = 5, 그리고 첫 번째 버전은 = 4는 잘못된 버전입니다.调用 isBadVersion(3) -> false 调用 isBadVersion(5) -> true 调用 isBadVersion(4) -> true 所以,4 是第一个错误的版本。
분석 :
N에 대해 말했다 제목, 잘못된 버전에 따라, 후자의 후속 버전이 잘못.
그래서 우리는 규칙의 절반을 쓸 수 있습니다 :
거짓 isBadVersion (중간) ==는,이 버전에는 오류가 없다는 것을 증명 다시 보면 버전을 보유 할 필요가 없습니다, 아니 잘못, L = 중간 + 1
isBadVersion (중간) == true의 경우, 이 버전에 오류가 있지만, 첫 번째 오류 아니었다 몰랐다, 그래서 필요, R = MID 유지하고, 기대
AC 코드 :
/ * isBadVersion API는 부모 클래스의 버전 관리에 정의되어 있습니다. 부울 isBadVersion (INT 버전); * / 공용 클래스 해결 확장 버전 관리를 { 공공 INT firstBadVersion ( INT N) { INT의 L = 1 ; INT R = N; 반면 (L < R) { INT 중간 = (L + R) >>> 1 ; 경우 (isBadVersion (MID) == 참 ) { R = 미드; } 다른 { L중간 = + 1 ; } } 리턴 L; } }
: 비슷한 질문은 깊은 인상을해야합니까 -374은 크기 (374 맞춰 번호 높거나 낮은) 추측의 주제 이분법을 Leetcode.