[优选算法专题三.二分查找——NO.24搜索旋转排序数组中的最⼩值]

题目链接

LCR 173. 点名

题目描述

题目解答

代码的核心思路是使用二分查找法,时间复杂度为 O (log n),空间复杂度为 O (1),

代码解析:

  1. 函数takeAttendance接收一个记录数组records,返回缺失的学生编号。

  2. 二分查找的逻辑:

    • 定义左右指针left和right
    • 当left < right时,计算中间位置mid
    • 如果records[mid] == mid,说明在mid位置之前的学生都已正常出席,缺失的学生在右侧,因此移动left到mid + 1
    • 否则,说明缺失的学生在左侧或就是mid位置,因此移动right到mid
  3. 循环结束后:

    • 如果records[left] == left,说明所有学生都已出席,缺失的是最后一个学生的下一个编号(left + 1)
    • 否则,left所在位置就是缺失的学生编号

这个算法的前提假设是:数组中除了一个缺失的编号外,其他编号都是连续且与索引位置一致的。例如,对于数组[0,1,2,4,5],算法会正确返回3。

相关推荐
lvwangshu10 小时前
CF1882D Tree XOR 题解
动态规划·题解·贪心·dp·树形dp·换根dp·性质题·思维好题·推导题
罗湖老棍子10 小时前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环
文丑颜不良啊10 小时前
LeetCode201~225题目解析
java·leetcode
Interview Aid11213 小时前
Snowflake OA 面试真题:前缀和、BFS 与动态规划
面试·动态规划·宽度优先
郝亚军13 小时前
manifest 中 `sha256` 与 `signValue` 的作用
java·开发语言·数据结构
Nil20814 小时前
LeetCode 283移动零
数据结构·算法·leetcode
文丑颜不良啊15 小时前
LeetCode226~250题目解析
java·leetcode
库玛西16 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
花间相见19 小时前
【计算基础|MySQL08】索引(上):为什么是 B+ 树
数据结构·mysql·算法·架构
夊19 小时前
数据结构第二课:顺序表揭秘
数据结构