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

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

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

例如,在数组 [−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;
    }
};

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容