제목 설명
정수의 단조롭게 증가하는 배열을 가정하고 각 요소는 독특하다. 타겟 구성 요소와 동일한 어레이의 임의의 값을 찾기 위해, 프로그래밍 함수주십시오. 예를 들어, {-2, -1, 3,5}, 숫자 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));
}
}