제목 설명
여러 요소들의 어레이의 초기 배열은, 우리가 회전 호출 배열의 끝으로 이동.
출력 회전 작은 소자 어레이의 회전의 입력 어레이의 비 내림차순.
예를 들어, 배열 {3,4,5,1,2} {1,2,3,4,5}은 최소 어레이의 회전이다.
주 : 배열 크기가 0을 반환, 0이면 모든 요소는, 0보다 큰에 제시되어있다.
문제 해결 아이디어
이진 검색을 사용하여.
INT 높은 arr.length = - 1;
INT 낮은 = 0;
INT 중간 = + 저 (하이 - 로우) / 2;
우리는 세 가지 사례를 고려할 필요가있다 :
- [hjgh] 도착 도착 [중반]>이 경우 일 수있는 경우 : 3, 4, 5, 6, 0, 1, 2, 최소치가 우측 중간에 있어야 낮은 = 중간 + 1;
- 도착하면 [미드] <도착 [고]하면, 유사한 배열 [2,2,3,4,5,6,6] 다음, 필요 최소한의 어레이 [미드] 또는 중간 왼쪽, 오른쪽 때문에 반드시 모든 높은 = 중간을 증가;
- 되면 배열 [미드] == 배열 [고]하면, 유사한 배열 [1,0,1,1,1] 또는 [1,1,1,0,1]를 다음 최소 여부 좌측 중간에 판단 오른쪽으로, 우리가했던 테스트, 높은 = 높은 - 1;
참조 코드
1 공용 클래스 해결 { 2 공개 INT minNumberInRotateArray ( INT [] 배열) { 3 경우 (사항 Array.length == 0 ) { 4 창 0 ; 5 } 6 INT의 낮은 = 0 ; 7 INT 높은 사항 Array.length = - 1 ; 8 동안 (로우 < 높음) { 9 INT 중간 = + 저 (하이 - 로우) / 2 ; 10 의 경우 (배열 [미드] " 어레이 [고]) { 11 낮은 중간 = + 1 ; 12 } 다른 경우 (배열 [미드] < 어레이 [고]) { 13 높은 = 미드; 14 } 다른 { 15 높은 높이 = - 1 ; 16 } 17 } 18 리턴 배열 [저]; 19 } 20 }