배열의 회전의 최소 개수 : 배열

제목 설명

여러 요소들의 어레이의 초기 배열은, 우리가 회전 호출 배열의 끝으로 이동.
출력 회전 작은 소자 어레이의 회전의 입력 어레이의 비 내림차순.
예를 들어, 배열 {3,4,5,1,2} {1,2,3,4,5}은 최소 어레이의 회전이다.
주 : 배열 크기가 0을 반환, 0이면 모든 요소는, 0보다 큰에 제시되어있다.

문제 해결 아이디어

이진 검색을 사용하여.

INT 높은 arr.length = - 1;

INT 낮은 = 0;

INT 중간 = + 저 (하이 - 로우) / 2;

우리는 세 가지 사례를 고려할 필요가있다 :

  1. [hjgh] 도착 도착 [중반]>이 경우 일 수있는 경우 : 3, 4, 5, 6, 0, 1, 2, 최소치가 우측 중간에 있어야 낮은 = 중간 + 1;
  2. 도착하면 [미드] <도착 [고]하면, 유사한 배열 [2,2,3,4,5,6,6] 다음, 필요 최소한의 어레이 [미드] 또는 중간 왼쪽, 오른쪽 때문에 반드시 모든 높은 = 중간을 증가;
  3. 되면 배열 [미드] == 배열 [고]하면, 유사한 배열 [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 }

 

추천

출처www.cnblogs.com/carry6/p/11516859.html