Build a reservation system for a predefined set of conference rooms given as a list of room IDs [roomA, roomB...].
It should have a method like scheduleMeeting(startTime, endTime) that should return a reservation identifier including roomId and reserve it, or an error if no rooms are available.表面上是一个会议室预订问题,实际考察的是区间冲突检测、数据结构选择,以及在多房间场景下如何高效分配资源。
思路是:每个会议室维护自己的预约列表。每次新会议进来时,检查它和该房间已有会议是否重叠。如果不重叠,就可以插入并返回该房间的预约 ID。区间判断的核心是:两个会议 [start1, end1) 和 [start2, end2) 不冲突,当且仅当 end1 <= start2 或 end2 <= start1。反过来,只要 start1 < end2 && start2 < end1,就说明时间有重叠。
如果会议数量不大,可以用数组存每个房间的所有会议,每次线性扫描,逻辑简单,适合先写出正确版本。面试中更好的做法是让每个房间维护一个按开始时间排序的结构,例如 TreeMap、balanced BST 或 sorted list。这样每次只需要检查新会议前后相邻的两个区间,而不需要扫描整个会议列表。
一个比较清晰的设计是:系统初始化时保存所有 roomId;scheduleMeeting(startTime, endTime) 会依次检查每个 room 的日程。找到第一个可用房间后,把该会议插入这个房间的时间表,并生成 reservationId,例如 roomA_1000_1100_xxx。如果所有房间都冲突,则返回 no available room 的错误。
这类题在 Google 面试中很典型:题目描述短,但可以从简单版本一路扩展到系统设计。CSOAHELP 在辅导这类题时,帮助候选人把区间题、数据结构和真实系统设计连接起来,让回答既能写出代码,也能讲清楚 trade-off。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

