[쿠폰] [53-3] 및 [수치 첨자 배열 동일한 요소]

제목 설명

  정수의 단조롭게 증가하는 배열을 가정하고 각 요소는 독특하다. 타겟 구성 요소와 동일한 어레이의 임의의 값을 찾기 위해, 프로그래밍 함수주십시오. 예를 들어, {-2, -1, 3,5}, 숫자 3, 그리고 어레이의 인덱스와 동일하다.

없음 [소가 질문을 주소 네트워크를 털어]

아이디어 분석

또는 바이너리 사고, 찾을 경우 비교 중간 및 해당 첨자 관계 :

  1. 인덱스보다 큰 경우, 왼쪽 부분이 검색됩니다;
  2. 인덱스가보다 작은 경우, 오른쪽이 검색됩니다;
  3. 정확히 동일, 반환 값의 경우;

테스트 케이스

  1. 기능 시험 : 배열 인덱스 값과 동일한 요소를 포함 할 수 없다.
  2. 경계 값 테스트 : 하나의 배열 개수 및 첨자 값 어레이의 시작 또는 끝에서 동일한 요소.
  3. 스페셜 입력 테스트 : 포인터 배열은 nullptr 포인터를 나타낸다.

자바 코드

public class Offer053_03 {
    public static void main(String[] args) {
        test1();
        test2();
        test3();
        
    }

    public static int GetNumberSameAsIndex(int[] array) {
        return Solution1(array);
    }

    
    private static int Solution1(int[] array) {
        if(array==null || array.length<=0) {
            return -1;
        }
        int left = 0;
        int right = array.length-1;
        while(left<=right) {
            int mid = (left+right)>>1;
            if(array[mid]>mid) {
                right = mid-1;
            }else if(array[mid]<mid){
                left = mid+1;
            }else {
                return mid;
            }
        }
        return -1;
    }

    private static void test1() {
        int[] array = {-3,-1, 1,3,5};
        System.out.println(GetNumberSameAsIndex(array));
    }

    private static void test2() {
        int[] array = {0,1,2,3,4,5};
        System.out.println(GetNumberSameAsIndex(array));
    }
    private static void test3() {
        int[] array = {0};
        System.out.println(GetNumberSameAsIndex(array));
    }
}

코드 링크

안전 코드를 증명하는 행사는 -Java

추천

출처www.cnblogs.com/haoworld/p/offer533-shu-zu-zhong-shu-zhi-he-xia-biao-xiang-de.html