题目描述:假设一个单调递增的数组里的每个元素都是整数且是唯一的,请编程实现一个函数,找出数组中任意一个数值等于其下标的元素,例如,在数组{-3,-1,1,3,5}中数字3和它的下标相同。
public class Offer39 {
public static void main(String[] args) {
int[] nums = {-3, -1, 1, 3, 5};
System.out.println(getNumberSameAsIndex(nums, 0, nums.length - 1));
System.out.println(getNumberSameAsIndex(nums));
}
// 迭代
public static int getNumberSameAsIndex(int[] arr) {
if (arr == null || arr.length == 0) {
return -1;
}
int left = 0;
int right = arr.length - 1;
while (left < right) {
int middle = (left + right) >> 1;
if (middle == arr[middle]) {
return middle;
} else if (middle > arr[middle]) {
left = middle + 1;
} else if (middle < arr[middle]) {
right = middle - 1;
}
}
return -1;
}
// 递归
public static int getNumberSameAsIndex(int[] arr, int left, int right) {
if (left > right) {
return -1;
}
int middle = (left + right) >> 1;
if (middle == arr[middle]) {
return middle;
} else if (middle > arr[middle]) {
left = middle + 1;
} else if (middle < arr[middle]) {
right = middle - 1;
}
return getNumberSameAsIndex(arr, left, right);
}
}