news 2026/3/8 19:12:36

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/3/7 21:42:25

LC.846 | 一手顺子 | 有序集合| map计数

输入&#xff1a; 整数数组 hand 表示手里的牌面值整数 groupSize 表示每组顺子的长度 要求&#xff1a; 把所有牌分成若干组每组必须是 groupSize 张连续牌能分完返回 true&#xff0c;否则 false 输出&#xff1a; bool思路&#xff1a; 这题的关键不是“怎么凑一组顺子”&am…

作者头像 李华
网站建设 2026/3/6 10:06:47

SSH免密码登录配置:提升PyTorch镜像操作效率

SSH免密码登录配置&#xff1a;提升PyTorch镜像操作效率 在现代深度学习开发中&#xff0c;一个常见的场景是&#xff1a;你正坐在本地工作站前&#xff0c;准备调试一段训练脚本。远程服务器上的容器已经跑起来了&#xff0c;GPU 也已就绪&#xff0c;但每次 ssh 连接、每次 s…

作者头像 李华
网站建设 2026/3/2 1:43:53

Git rebase vs merge:PyTorch项目协作规范建议

Git rebase vs merge&#xff1a;PyTorch项目协作规范建议 在深度学习项目的实际开发中&#xff0c;一个看似微不足道的 Git 操作选择——是用 merge 还是 rebase&#xff0c;往往会在几个月后成为团队回溯 bug 时的“灾难源头”。尤其当多个研究员同时在 PyTorch 项目上迭代模…

作者头像 李华
网站建设 2026/2/23 17:54:53

GitHub Issue模板设计:收集用户关于镜像的反馈

GitHub Issue模板设计&#xff1a;收集用户关于镜像的反馈 在深度学习项目开发中&#xff0c;一个常见的痛点是环境配置——明明在本地跑得好好的模型&#xff0c;换到服务器上却“水土不服”。PyTorch 与 CUDA 的版本兼容性问题、驱动缺失、依赖库冲突……这些问题让不少开发者…

作者头像 李华
网站建设 2026/3/7 12:57:24

《机器学习SVM从零到精通:图解最优超平面与软间隔实战》

文章目录 SVM一.SVM是什么&#xff1f;二.怎么学习SVM&#xff1f;三.为什么学习SVM&#xff1f;四.深入理解SVMdata -> 数据classifier -> 分类器optimization -> 最优化kernelling -> 核函数hyperplane -> 超平面 如何选取一个最佳的超平面Small Margin&#…

作者头像 李华