-278의 Leetcode 주제 이분법. 첫 번째 잘못된 버전 (첫 번째 잘못된 버전)

-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.

추천

출처www.cnblogs.com/qinyuguan/p/11415899.html