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

题目链接

LCR 173. 点名

题目描述

题目解答

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

代码解析:

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

  2. 二分查找的逻辑:

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

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

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

相关推荐
VekiSon4 分钟前
数据结构与算法——队列
数据结构
say_fall14 分钟前
C语言编程实战:每日一题:有效的括号
c语言·开发语言·数据结构·
IT_Octopus15 分钟前
算法题:力扣 热题100道 中等难度128. 最长连续序列
算法·leetcode
Swift社区19 分钟前
LeetCode 441 - 排列硬币
算法·leetcode·职场和发展
Q741_14725 分钟前
C++ 栈 模拟 力扣 844. 比较含退格的字符串 题解 每日一题
c++·算法·leetcode·模拟·
CoderYanger32 分钟前
动态规划算法-简单多状态dp问题:14.粉刷房子
开发语言·算法·leetcode·动态规划·1024程序员节
张张努力变强35 分钟前
二叉树——精选题目,体验递归的暴力美学!
c语言·数据结构·算法
BD_Marathon38 分钟前
【Java】集合里面的数据结构
java·数据结构·python
FMRbpm41 分钟前
栈练习--------(LeetCode 739-每日温度)
数据结构·c++·算法·leetcode·新手入门
子一!!41 分钟前
数据结构==二叉平衡树,AVL树 ===
数据结构·算法