美文网首页二分
【剑指 offer】数组中值和下标相等的元素

【剑指 offer】数组中值和下标相等的元素

作者: 邓泽军_3679 | 来源:发表于2019-05-06 15:26 被阅读0次

1、题目描述

假设一个单调递增的数组里的每个元素都是整数并且是唯一的。

请编程实现一个函数找出数组中任意一个数值等于其下标的元素。

例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。

样例

输入:[-3, -1, 1, 3, 5]
输出:3
注意:如果不存在,则返回-1。

2、问题描述:

  • 单调有序,首先考虑二分法。

3、问题关键:

  • 二分条件, 如果nums[mid] > mid, 说明答案在前半部分。r = mid;
    else l = mid + 1;

4、C++代码:

class Solution {
public:
    int getNumberSameAsIndex(vector<int>& nums) {
        if (nums.empty()) return -1;
        int l = 0, r = nums.size();
        while(l < r) {
            int mid = l + r >> 1;
            if (nums[mid] == mid) return mid;
            if (nums[mid] > mid) r = mid;
            else l = mid + 1;
        }
        return -1;
    }
};

相关文章

网友评论

    本文标题:【剑指 offer】数组中值和下标相等的元素

    本文链接:https://www.haomeiwen.com/subject/mmtdoqtx.html