剑指offer 53 - III. 数组中数值和下标相等的元素
假设一个单调递增的数组里的每个元素都是整数并且是唯一的。
请编程实现一个函数找出数组中任意一个数值等于其下标的元素。
例如,在数组 [−3,−1,1,3,5]
中,数字 3
和它的下标相等。
样例
输入: [-3, -1, 1, 3, 5]
输出: 3
注意:
如果不存在,则返回-1。
解题思路
由于数组是递增的,故如果当前元素和其下标相等,则显然
当前元素之后的数肯定是大于等于下标的,所以我们可以找到符合当前元素大于等于其下标的左边界即可。
上面我说了显然,好吧,我不想耍流氓不解释为什么显然,画个图吧。
Java代码
class Solution {
public int getNumberSameAsIndex(int[] nums) {
if(nums == null || nums.length == 0) return -1;
int l = 0,r = nums.length - 1;
while(l < r){
int mid = l + r >> 1;
if(nums[mid] >= mid) r = mid;
else l = mid + 1;
}
//nums[r] != r时,r其实就是最后一个元素的下标
if(nums[r] == r) return r;
else return -1;
}
}