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

相关推荐
8Qi81 小时前
LeetCode 516:最长回文子序列
算法·leetcode·职场和发展·动态规划
想要成为糕糕手2 小时前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
tyung5 小时前
Go 手写 Wait-Free SPSC 无界队列:无 CAS、无锁、泛型节点池
数据结构·后端·go
Chen_harmony5 小时前
一、数据结构概念和复杂度计算
数据结构
小欣加油5 小时前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
怪兽学LLM7 小时前
LeetCode 438 找到字符串中所有字母异位词(Python 固定滑动窗口+字符计数解法)
python·算法·leetcode
Tisfy7 小时前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯
fie88897 小时前
LBP + HOG 特征检测与识别 MATLAB 实现
数据结构·算法·matlab
wabs6667 小时前
关于动态规划【力扣63.不同路径II与62.不同路径的区别(C++)】自我总结
动态规划
moeyui7058 小时前
LeetCode 380:Insert Delete GetRandom O(1) 题解和一些延伸
算法·leetcode·职场和发展