[优选算法专题三.二分查找——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。

相关推荐
longlongzihan3 小时前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
今晚打老虎4 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
不会就选b5 小时前
算法日常・每日刷题--<贪心>26
数据结构·算法
Logic1019 小时前
C语言/数据结构位运算题解:异或XOR找出书柜中编号只出现一次的那一层——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
smj2302_796826529 小时前
解决leetcode第4064题至多一次取反能被k整除的最长子数组II
python·算法·leetcode
青山木9 小时前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode
垆边人似月.9 小时前
字符串重排后最大字典序
算法·leetcode·职场和发展
代码什么用10 小时前
LeetCode-42. 接雨水
算法·leetcode
SelectDB技术团队11 小时前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
数据结构·数据库·clickhouse·日志·apache doris·selectdb·湖仓架构升级
kiracrimson11 小时前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法