剑指offer题型分类及各题的代码及解题思路
题目三:数组中数值和下标相等的元素
假设一个单调递增的数组中的每个元素都是整数并且是唯一的。请编写一个函数,找出数组中任意一个数值等于其下标的元素。
例如:在数组{-3,-1,1,3,5}中,数字3和它的下标相等。
分析:
这一题也可以使用二分查找
C++实现代码如下
int GetNumSameAsIndex(const int* num, int len)
{
if(num == NULL || len == 0)
return -1;
int left = 0;
int right = len - 1;
while (left <= right)
{
int mid = left + ((left + right) >> 1);
if (num[mid] == mid)
return mid;
if (num[mid] > mid)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}