news 2026/4/6 19:27:27

LC.855 | 考场就座 | 有序集合 | set的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LC.855 | 考场就座 | 有序集合 | set的应用

输入:

  • 构造:ExamRoom(int n),座位编号为[0, n-1]
  • 操作:
    • seat():安排下一位学生入座
    • leave(int p):座位p的学生离开(保证p上有人)

要求:

  • seat()必须选择离最近的人最远的位置;
  • 若有多个满足条件,选编号最小的座位。

输出:

  • seat()返回座位编号;leave()无返回。

思路:

用一个有序集合set<int> students维护当前已坐下的座位编号(自动有序)。

seat() 怎么找最优位置?

最优位置只可能出现在三类“空段”里:

  1. 头部空段:从0到第一个已坐位置first
  • 如果坐0,到最近人的距离就是first - 0 = first
  • 所以头部候选距离dist = first,候选座位bestSeat = 0
  1. 中间空段:两个相邻已坐座位prevs之间
  • 最优就是坐在中点(向下取整),距离为(s - prev) / 2
  • 遍历students,对每一对相邻座位计算d = (s - prev) / 2
  • d > dist,更新bestSeat = prev + d
  1. 尾部空段:最后一个已坐位置lastn-1
  • 如果坐n-1,距离就是(n-1) - last
  • tailDist > dist,更新bestSeat = n-1

最后把bestSeat插入集合并返回。

leave()

直接students.erase(p)即可。


复杂度:

  • 时间复杂度:
    • seat():O(M) 扫描当前已坐人数M(set 遍历) + 插入 O(log M)
    • leave():O(log M)
  • 空间复杂度:O(M)

classExamRoom{private:intN;set<int>students;public:ExamRoom(intn){N=n;}intseat(){if(students.empty()){students.insert(0);return0;}intdist=*students.begin();// 头部空段距离intbestSeat=0;intprev=-1;for(ints:students){if(prev!=-1){intd=(s-prev)/2;if(d>dist){dist=d;bestSeat=prev+d;}}prev=s;}inttailDist=(N-1)-*students.rbegin();if(tailDist>dist){bestSeat=N-1;}students.insert(bestSeat);returnbestSeat;}voidleave(intp){students.erase(p);}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 23:21:37

计算机毕设java网络相册平台 基于Java的网络相册管理系统开发与实现 Java技术驱动的网络相册平台设计与构建

计算机毕设java网络相册平台bc5429 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着互联网的飞速发展&#xff0c;人们的生活方式发生了巨大的变化。在快节奏的现代生活中&…

作者头像 李华
网站建设 2026/3/31 17:00:40

如何彻底禁止Win11 自动更新? 这几种方法值得试试 !!win11更新怎么关闭?windows禁止更新工具插件,Win11永久关闭更新要怎么操作?

由于微软更新策略变更&#xff0c;出厂预装系统是无法禁用更新功能的&#xff0c;在联网检测到版本较低的情况下微软将强制推送更新通知。 那么如何彻底禁止Windows 10自动更新? win11更新怎么关闭&#xff1f;windows禁止更新工具插件,Win11永久关闭更新要怎么操作&#x…

作者头像 李华
网站建设 2026/4/6 12:21:08

GitHub Star增长秘诀:分享实用的PyTorch实战案例

GitHub Star增长秘诀&#xff1a;分享实用的PyTorch实战案例 在深度学习项目层出不穷的今天&#xff0c;你是否曾疑惑——为什么有些 GitHub 仓库代码并不复杂&#xff0c;却能轻松获得上千 Star&#xff1f;而另一些实现更精巧、算法更前沿的项目&#xff0c;反而无人问津&…

作者头像 李华
网站建设 2026/4/3 22:19:36

VPC 内相关组件详细介绍

Internet▲│┌───── IGW ─────┐│ │┌───────┴───────┐ ┌───┴────────┐│ Public Subnet │ │ Public Subnet││ (ALB / NAT) │ │ (ALB / NAT) ││ Route Table A │ │ Route Table A││ 0.0.0.0/…

作者头像 李华
网站建设 2026/4/4 9:47:21

GitHub Actions自动测试PyTorch环境的CI/CD配置

GitHub Actions 自动测试 PyTorch 环境的 CI/CD 配置 在深度学习项目日益复杂的今天&#xff0c;一个常见的场景是&#xff1a;开发者本地运行模型训练一切正常&#xff0c;提交代码后却在 CI 流水线中报错——“CUDA not available” 或 “torch version mismatch”。这种“在…

作者头像 李华
网站建设 2026/4/3 16:42:20

清华镜像源替换Anaconda默认通道的配置步骤

清华镜像源加速 Conda 环境配置&#xff1a;高效搭建 PyTorch 开发环境 在深度学习项目开发中&#xff0c;一个常见的“拦路虎”并不是模型调参或数据清洗&#xff0c;而是——环境装不上。 你是否经历过这样的场景&#xff1a;深夜赶论文复现实验&#xff0c;conda install py…

作者头像 李华