美文网首页二分
【剑指 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