美文网首页
剑指offer 57- 数组中数值和下标相等的元素

剑指offer 57- 数组中数值和下标相等的元素

作者: 顾子豪 | 来源:发表于2021-06-03 10:37 被阅读0次

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

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

    例如,在数组 [−3,−1,1,3,5]中,数字 3

    和它的下标相等。
    样例

    输入:[-3, -1, 1, 3, 5]
    
    输出:3
    

    注意:如果不存在,则返回-1。

    分析:二分法O(logN)


    观察数据的特点:具有二段性
    即黄色部分满足:nums[i] < i

    红色部分满足:nums[i] >= i

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

    相关文章

      网友评论

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

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