数组中数值和下标相等的元素。
- 假设一个单调递增的数组里的每个元素都是整数并且是唯一的。
- 找出数组中任意一个数值等于其下标的元素。比如在数组{-3, -1, 1, 3, 5},数字3和它的下标相等
思路一:因为数组是单调递增的,利用二分查找,如果当前位置的索引大于数值,则其左边比该数值小的数都比其索引小,直接去右边寻找,如果小于,则右边所以数都大于索引,直接去左边寻找。
代码如下:
public class ValEqualIndex {
public int findValEqualsIndex(int[] array) {
if (array == null) return -1;
int low = 0;
int high = array.length-1;
while (low <= high){
int mid = (low + high) >> 1;
if (mid == array[mid]) return mid;
//如果下标大于值,则相等的值必然在右边
if (mid > array[mid]) low = mid +1;
//如果下边小于值,则相等的值必然在左边
if (mid < array[mid]) high = mid -1;
}
return -1;
}
}