当前位置: 首页 > news >正文

剑指offer51_数组中数值和下标相等的元素

数组中数值和下标相等的元素


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

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

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

数据范围

数组长度 [ 1 , 100 ] [1,100] [1,100]

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

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


算法思路
  1. 初始化指针:左指针 l 初始化为 0,右指针 r 初始化为数组长度。
  2. 二分查找
    • 计算中间位置 mid
    • 检查 nums[mid] 是否大于或等于 mid
      • 如果是,说明目标元素在左半部分或当前位置,调整右指针 r = mid
      • 否则,目标元素在右半部分,调整左指针 l = mid + 1
  3. 验证结果:循环结束后检查 nums[l] 是否等于 l,如果是则返回 l,否则返回 -1。
  • 时间复杂度:O(log n),其中 n 是数组的长度。因为算法使用了二分查找,每次都将搜索范围减半。
  • 空间复杂度:O(1),只使用了常数级别的额外空间。

class Solution {
public:int getNumberSameAsIndex(vector<int>& nums) {int l = 0, r = nums.size();while(l < r){int mid = l + r >> 1;if(nums[mid] >= mid) r = mid;else l = mid + 1;}if(nums[l] == l) return l; else return -1;}
};
注意事项
  1. 边界条件:循环结束后需检查 nums[l] 是否等于 l,避免数组越界或无效结果。
  2. 输入处理:若数组为空,直接返回 -1。
  3. 二分查找细节:确保 mid 的计算和指针调整正确,避免死循环或遗漏解。
http://www.dtcms.com/a/263325.html

相关文章:

  • 机器人仿真(1)Ubuntu24.04下CLion的ROS2开发环境配置
  • [ C++ ] | unordered_map 底层实现原理
  • Linux-进程概念(1)
  • 亚马逊,塔吉特采购,测评防砍单封号的养号下单黄金法则
  • 华为云Flexus+DeepSeek征文 | Word办公软件接入华为云ModelArts Studio大模型,实现AI智能办公
  • 【C++指南】C++ list容器完全解读(三):list迭代器的实现与优化
  • Deploy StarRocks with Docker
  • ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
  • Deepoc 大模型在无人机行业应用效果的方法
  • Python函数参数实例练习--输出信息
  • 抗量子域名系统:全面的系统级研究
  • 前端领域的技术热点与深度解析
  • 对selenium进行浏览器和驱动进行配置Windows | Linux
  • [面试]手写题-Promise.all() Promise.race()
  • 博图SCL编程:结构体(STRUCT)使用详解与实战案例
  • HTML<span>元素详解
  • 安装bcolz包报错Cython.Compiler.Errors.CompileError: bcolz/carray_ext.pyx的解决方法
  • 条件运算符和逗号运算
  • Intel Fortran Compiler (ifx) 详细使用指南:新一代 Fortran 编译器在流体动力学模拟中的应用
  • 51单片机CPU工作原理解析
  • python环境快速搭建
  • 深入比较 Gin 与 Beego:Go Web 框架的两大选择
  • Spring Boot 统一功能处理:拦截器详解
  • 机器视觉检测系统的影响因素解析
  • Prompt 精通之路(七)- 你的终极 AI 宝典:Prompt 精通之路系列汇总
  • 《Building REST APIs with Flask》读后感
  • 打造现代Web应用的高效解决方案:Full Stack FastAPI模板
  • JVM 垃圾回收(GC)笔记
  • Nestjs框架: Nestjs 复杂企业应用场景架构设计分析
  • WPF中依赖属性和附加属性