题目描述
假设一个单调递增的数组里的每个元素都是整数并且是唯一的。
请编程实现一个函数找出数组中任意一个数值等于其下标的元素。
例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等
样例描述
输入:[-3, -1, 1, 3, 5]
输出:3
注意:如果不存在,则返回-1。
思路
- 由于数组是递增数列,要查找的元素满足
nums[i]==i
,不难证明,nums[i]-i
也是递增的,则此时相当于在新的递增数列中查找nums[i]-i==0
的元素,所以考虑二分法。 - 注意判断若最后二分的结果不为
r
,则说明不存在。
代码
class Solution {
public int getNumberSameAsIndex(int[] nums) {
int l=0,r=nums.length-1;
while(l<r){
int mid=l+r>>1;
//大于0,则改变上限
if(nums[mid]-mid>=0) r=mid;
else l=mid+1;
}
//判断是否相等
if(nums[r]-r==0) return r;
else return -1;
}
}