题目链接
题目描述
假设一个单调递增的数组里的每个元素都是整数并且是唯一的。
请编程实现一个函数找出数组中任意一个数值等于其下标的元素。
例如,在数组 [−3,−1,1,3,5]中,数字 3和它的下标相等。
数据范围:数组长度 [1,100]。
样例
输入:[-3, -1, 1, 3, 5]输出:3
注意:如果不存在,则返回-1。
题目分析
数组单调递增——二分查找O(logn)
代码实现
class Solution {
public int getNumberSameAsIndex(int[] nums) {
int left = 0, right = nums.length - 1;
while(left <= right){
int mid = (left + right) / 2;
if(mid == nums[mid]) return mid;
else if(mid < nums[mid]){
right = mid - 1;
}else{
left = mid + 1;
}
}
if(left != nums[left])
return -1;
else
return left;
}
}
class Solution {
public int getNumberSameAsIndex(int[] nums) {
return search(nums, 0, nums.length - 1);
}
public int search(int[] nums, int left, int right){
if(left == right && left != nums[left]) return -1;
int mid = (left + right) / 2;
if(mid == nums[mid]) return mid;
else if(mid < nums[mid]) return search(nums, left, mid - 1);
else return search(nums, mid + 1, right);
}
}