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