57.数组中数值和下标相等的元素
假设一个单调递增的数组里的每个元素都是整数并且是唯一的。
请编程实现一个函数找出数组中任意一个数值等于其下标的元素。
例如,在数组 [−3,−1,1,3,5] 中,数字 3 和它的下标相等。
数据范围:
数组长度 [1,100]。
样例:
输入:[-3, -1, 1, 3, 5]
输出:3
注意: 如果不存在,则返回-1
代码:
class Solution {
public int getNumberSameAsIndex(int[] nums) {
//初始化二分查找的左右指针
int l = 0,r = nums.length-1;
//使用二分查找来寻找nums[i] = i 的元素
while(l<r){
//计算中间位置
int mid = l+r>>1;
//如果中间元素的值大于等于其索引,说明目标在左半部分
if(nums[mid]>=mid)r = mid;
//否则目标在右半部分
else l = mid+1;
}
//检查找到的位置是否满足条件,返回满足条件的索引
if(nums[l] == l)return l;
//没有找到满足条件的元素则返回-1
else return -1;
}
}