题目地址

https://leetcode-cn.com/problems/exam-room/

题目描述

在考场里,一排有 N 个座位,分别编号为 0, 1, 2, ..., N-1 。
当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外,如果考场里没有人,那么学生就坐在 0 号座位上。)
返回 ExamRoom(int N) 类,它有两个公开的函数:其中,函数 ExamRoom.seat() 会返回一个 int (整型数据),代表学生坐的位置;函数 ExamRoom.leave(int p) 代表坐在座位 p 上的学生现在离开了考场。每次调用 ExamRoom.leave(p) 时都保证有学生坐在座位 p 上。示例:
输入:["ExamRoom","seat","seat","seat","seat","leave","seat"], [[10],[],[],[],[],[4],[]]
输出:[null,0,9,4,2,null,5]
解释:
ExamRoom(10) -> null
seat() -> 0,没有人在考场里,那么学生坐在 0 号座位上。
seat() -> 9,学生最后坐在 9 号座位上。
seat() -> 4,学生最后坐在 4 号座位上。
seat() -> 2,学生最后坐在 2 号座位上。
leave(4) -> null
seat() -> 5,学生最后坐在 5 号座位上。提示:1 <= N <= 10^9在所有的测试样例中 ExamRoom.seat() 和 ExamRoom.leave() 最多被调用 10^4 次。保证在调用 ExamRoom.leave(p) 时有学生正坐在座位 p 上。

代码实现

javascript

/*** @param {number} n*/
var ExamRoom = function(n) {this.n = n;// 用students来存储已经有人的座位this.students = [];
};/*** @return {number}*/
ExamRoom.prototype.seat = function() {let student = 0;if (this.students.length > 0) {let dist = this.students[0];let prev = dist;for (let i = 1; i < this.students.length; i++) {let d = Math.floor((this.students[i]-prev)/2);if (d > dist) {dist = d;student = prev + dist;}prev = this.students[i];}    if (this.n - 1 - this.students[this.students.length-1] > dist) student = this.n - 1;}if (!this.students.includes(student)) this.students.push(student);this.students.sort((a,b) => a-b);return student;
};/** * @param {number} p* @return {void}*/
ExamRoom.prototype.leave = function(p) {this.students = this.students.filter(v => v!==p);
};

leetcode855. 考场就座相关推荐

  1. [Swift]LeetCode855. 考场就座 | Exam Room

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. leetcode-855. 考场就座

    思路: 使用set(有序集合)记录seat的位置. 如果set为空,放入索引为0的位置. 遍历set,记录两个人之间距离的一半(pre+这个距离就是中点),如果这个距离比最大距离大,则记录pos和更新 ...

  3. LeetCode 855. 考场就座

    855. 考场就座 [有序集合]用TreeSet存已经选好的座位,每次遍历所有的座位,如果两个之间的差值比当前max大,那么更新max和最后落座的位置.需要特别注意特判一下开头和结尾,因为有leave ...

  4. Leetcode 855. Exam Room 考场就座:提供两种解法

    Leetcode 855. Exam Room 考场就座: 提供两种解法 855. Exam Room 考场就座(两种解法) 题目描述 示例: 解答1 代码1 解答2 代码2 855. Exam Ro ...

  5. 855. 考场就座(高频题)

    855. 考场就座 题目 解题思路 代码 题目 在考场里,一排有 N 个座位,分别编号为 0, 1, 2, -, N-1 . 当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座 ...

  6. LeetCode - OrderMap - 855.考场就座

    题目 855.考场就座 难度 中等 在考场里,一排有 N 个座位,分别编号为 0, 1, 2, -, N-1 . 当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上.如果有 ...

  7. LeetCode解析------855.考场就座

    题目: 在考场里,一排有 N 个座位,分别编号为 0, 1, 2, -, N-1 . 当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上.如果有多个这样的座位,他会坐在编号 ...

  8. LeetCode855:考场就座

    如题: 思路分析: 我们每次挑选座位的时候,需要里最近的人距离最大,也就是说如果要坐在两个人之间,应该坐在中点的位置 因此我们可以将两个座位抽象成一个线段,第一个人是线段开始位置start,第二个人是 ...

  9. 【855. 考场就座】

    来源:力扣(LeetCode) 描述: 在考场里,一排有 N 个座位,分别编号为 0, 1, 2, ..., N-1 . 当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上 ...

最新文章

  1. 今天的 IBM —— 一封来自 IBM 董事长、首席执行官 Arvind Krishna 的公开信
  2. CCNP-22 路由重发布2(BSCI)
  3. Win2008R2配置WebDeploy发布网站
  4. python3 返回当前星期几 中文
  5. Ext---CheckBoxGroup的取值和赋值
  6. 大数据技术之kafka (第 3 章 Kafka 架构深入) 分区策略在分析
  7. 《日志管理与分析权威指南》一1.6 人、过程和技术
  8. 技术核心 | MySQL性能结构优化原理
  9. File /usr/bin/pip, line 11, in module sys.exit(__main__._main()) AttributeError: 'module' ob...
  10. mqtt发布json数据_微服务实战:从架构到发布(一)
  11. wx-jq:一套完全原创的微信小程序插件集合库
  12. SHEditor v0.3 SkinSharp皮肤设计工具
  13. WML语言基础(WAP建站)三
  14. GPS经纬度转百度经纬度JAVA
  15. arcos的matlab定义,想用matlab解一个带arccos的方程。可是结果好像没有解析解。求帮助解数值解...
  16. CSDN-markdown编辑器的使用
  17. 用python实现阴阳师简单挂机脚本
  18. css3 缩放scale()方法
  19. 【学习笔记】PHP进阶
  20. 基于JAVA失物招领系统设计与实现 开题报告

热门文章

  1. Java文件操作(超详细+代码示例)
  2. 我要学画画(持续更新~)
  3. php返回数据格式化类
  4. 你练到什么程度了(J2EE)
  5. go底层系列-defer原理剖析
  6. 微信公众号分享问题总结
  7. MTK面试应该知道的N个问题
  8. linux系统的电视怎么安装直播,Linux下nginx的安装及点直播使用示范
  9. 一次性弄懂debounce
  10. Java设计模式:代理