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

LeetCode - LCR 173. 点名

题目

LCR 173. 点名 - 力扣(LeetCode)

思路

首先对数组进行排序,使学号按顺序排列

在排序后的数组中,如果没有缺失的学号,那么每个元素应该等于其索引值

使用二分查找找到第一个不等于其索引的元素位置:

  • 如果 records[mid] == mid,说明缺失的数字在右半部分
  • 如果 records[mid] > mid,说明缺失的数字在左半部分(包括mid)

循环结束时,left 指向的是第一个不等于其索引的位置,即缺失的学号

时间复杂度:O(n log n),主要是排序的时间复杂度

空间复杂度:O(1),只使用常数额外空间

读者可能出现的错误写法 

class Solution {
public:int takeAttendance(vector<int>& records) {int left = 0;int right = records.size()-1;while(left < right){int mid = left + (right - left)/2;if(records[mid] == mid){left = mid+1;}else{right = mid;}}return right;}
};

边界情况处理:

你的代码没有处理缺失的是最后一个数字(即n-1)的情况。循环结束后,如果 records[right] == right,说明缺失的是最后一个数字。

正确写法

class Solution {
public:int takeAttendance(vector<int>& records) {int left = 0;int right = records.size()-1;while(left < right){int mid = left + (right - left)/2;if(records[mid] == mid){left = mid+1;}else{right = mid;}}if(records[left] == right){return right+1;}return right;}
};
http://www.xdnf.cn/news/1041013.html

相关文章:

  • 基于深度学习的人类活动识别模型研究:HAR-DeepConvLG的设计与应用
  • 【大厂机试题解法笔记】恢复数字序列
  • Python开发功能实用
  • 关于钉钉的三方登录
  • 项目管理工具在并行管理中如何充分发挥作用
  • Python 使用 DrissionPage 模块进行爬虫
  • 【Linux网络】多路转接之select
  • windows 开发
  • JavaScript性能优化实战指南:从理论到案例的全面解析
  • 【医疗电子技术-7.2】血糖监测技术
  • 高效同步Linux服务器文件技巧
  • Spring Bean 生命周期:注册、初始化、注入及后置操作执行顺序
  • 湖北理元理律师事务所债务规划方法论:法律框架下的可持续还款体系
  • Java反射机制深度解析
  • 微信小程序实现文字逐行动画效果渲染显示
  • 《Origin画百图》之核密度图
  • JAVA中关于Animal和Dog类的类型转换,可能出现ClassCastException的情况
  • AndroidMJ-mvp与mvvm
  • 贪心算法经典问题
  • 思科交换机远程登录配置
  • XCTF-misc-Test-flag-please-ignore
  • Trino权威指南
  • DP刷题练习(一)
  • Java内存模型与垃圾回收:提升程序性能与稳定性!
  • 戴维南端接与 RC端接
  • 源码开发详解:搭建类似抖音小店的直播带货APP需要掌握哪些技术?
  • Codeforces Round 1030 (Div. 2)
  • OpenVINO使用教程--resnet分类模型部署
  • QCombobox设置圆角下拉列表并调整下拉列表位置
  • EffRes-DrowsyNet:结合 EfficientNetB0 与 ResNet50 的新型混合深度学习模型用于驾驶员疲劳检测算法实现