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

简介: 剑指offer 57. 数组中数值和下标相等的元素

题目描述


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

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

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



数据范围

数组长度 [1,100]。

样例

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

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


方法一:二分查找 O(logn)


因为数组中至少有一个数是其值等于其所在下标的,且该数组是递增的,所以可以以第一个数值等于其下标的数为分界线,其左边所有数的数值都一定小于其下标,而其右边所有数都一定大于等于其下标。


特殊情况: 如果不满足上述条件,则说明该数组中没有出现一个数值等于下标的数,直接返回 -1 即可。

因此,我们可以通过上面的划分条件进行二分,找到第一个数值等于下标的那个元素,如果没有则返回 -1

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[l] == l)  return l;
        return -1;
    }
};

欢迎大家在评论区交流~

目录
相关文章
|
数据采集 Java 数据库
大学里面抢课到底可行吗?我来给你彻底说明白
大学里面抢课到底可行吗?我来给你彻底说明白
|
4月前
|
机器学习/深度学习 存储 算法
基于压缩感知的SAR成像仿真程序(MATLAB实现)
基于压缩感知的SAR成像仿真程序(MATLAB实现)
|
存储 分布式数据库 数据库
Hbase学习二:Hbase数据特点和架构特点
Hbase学习二:Hbase数据特点和架构特点
807 0
|
数据采集 算法 关系型数据库
在 MySQL 中使用 SOUNDEX?
【8月更文挑战第6天】
436 0
在 MySQL 中使用 SOUNDEX?
|
运维 监控 Kubernetes
揭秘运维开发:如何让你的系统更高效、更可靠?
揭秘运维开发:如何让你的系统更高效、更可靠?
|
存储 缓存 Java
「计算机原理」| CPU 缓存 & 缓存一致性 & 伪共享
「计算机原理」| CPU 缓存 & 缓存一致性 & 伪共享
1337 0
「计算机原理」| CPU 缓存 & 缓存一致性 & 伪共享
|
机器学习/深度学习 存储 人工智能
达摩院自研向量检索引擎Proxima在行业搜索中的应用
淘宝搜索推荐、视频搜索背后使用了什么样的检索技术?非结构化数据检索,向量检索,以及多模态检索,它们到底解决了什么问题?今天由阿里达摩院的科学家从业务问题出发,抽丝剥茧,深度揭秘达摩院内部技术,向量检索引擎 Proxima,以及在阿里云开放搜索产品行业模板能力的实践应用~
2837 1
达摩院自研向量检索引擎Proxima在行业搜索中的应用
|
数据可视化 数据挖掘 Windows
单细胞免疫组库VDJ| 从零开始scRepertoire分析,解决真实场景中可能的问题(上)
单细胞免疫组库VDJ| 从零开始scRepertoire分析,解决真实场景中可能的问题
1908 0
|
传感器 运维 网络协议
Modbus故障码速查手册(故障码含义、分析原因、详细解读)
当涉及到Modbus通信协议的故障排查和调试时,速查手册是一项极为重要的资源。了解故障码及其含义能够帮助工程师在通信问题出现时迅速定位和解决相关故障。 本篇文章旨在为读者提供一个方便快速查阅的资源,以便快速获取有关Modbus通信中可能出现的故障码的信息。通过仔细研究这些故障码,读者可以更有效地诊断和解决通信问题,减少故障排查的时间。
7228 0