面试题53(3):数组中数值和下标相等的元素

题目

假设一个单调递增的数组里的每个元素都是整数并且唯一。编写函数找出数组中任意一个数值等于其下标的元素。例如:在数组{-3,-1,1,3,5}中,数字3和它的下标相等。

解题思路

  1. 二分查找
  2. 和(2)题很相似,若中间数组的值刚好等于下标,则就找到
    若中间数组的值大于下标,则下一轮找数组的左半边
    若中间数组的值小于下标,则下一轮找数组的右半边

代码

class Solution{
  public:
    int getFirstk(int *sorted_array,int left,int right)
    {
        
        if(left <= right)
        {
            int index = (left + right) >> 1;
            int mid   = sorted_array[index];

            if(sorted_array[index] == index)
            {
                return mid;
            }
            else if(sorted_array[index] > index)
            {
                right  = index - 1;
            }
            else
            {
                left = index +1;
            }
            return getFirstk(sorted_array,left,right);
        }
        else
        {
            return -1;
        }
    }
    
    
};

完整代码见Gtihub

你可能感兴趣的:(面试题53(3):数组中数值和下标相等的元素)