Startup VO 面试真题解析:Implement get_available_slots(raw_slots) 预约时段合并与校验
实现 get_available_slots:先过滤字段缺失、时间戳非法或时长不是 10 分钟的时段,再把重叠或相邻的时段合并。用排序加区间合并即可。
题目描述
实现 get_available_slots(raw_slots)。Part 1 解析与校验:移除字段缺失、ISO 时间戳非法、或时长不等于 10 分钟的时段。Part 2 聚合:把剩余时段中重叠或相邻的合并成一个连续时段。
解题思路
先做校验,用 try/except 或时间解析把非法项过滤掉,并检查时长是否恰为 10 分钟。然后把合法时段按开始时间排序,顺序扫描:当前时段与已合并的最后一段重叠或相邻时,扩展其结束时间;否则新开一段。
from datetime import datetime, timedelta
def get_available_slots(raw_slots):
valid = []
for slot in raw_slots:
if not slot.get('start') or not slot.get('end'):
continue
try:
s = datetime.fromisoformat(slot['start'])
e = datetime.fromisoformat(slot['end'])
except ValueError:
continue
if e - s != timedelta(minutes=10):
continue
valid.append((s, e))
valid.sort()
merged = []
for s, e in valid:
if merged and s <= merged[-1][1]:
merged[-1] = (merged[-1][0], max(merged[-1][1], e))
else:
merged.append((s, e))
return merged
复杂度与易错点
校验 O(n),排序 O(n log n),合并 O(n)。时长的比较用 timedelta 而非字符串拼接;「相邻」是否合并(上一段结束恰好等于下一段开始)要按题面确认,比较条件据此用 < 还是 <=。
FAQ
校验时长为什么用 timedelta 比较而不是算字符串?
时间戳带时区或毫秒时,字符串拆分容易出错;解析成 datetime 后用 timedelta 差值判断最稳,也能顺带识别非法格式。
参考来源
联系 VOPathway
如果你希望把这套方法用于自己的 OA 或 VO 准备,可以把目标岗位、当前阶段、面试时间和主要难点发给 VOPathway,我们会据此安排针对性的练习与复盘。
- 微信:Coding0201
- 邮箱:[email protected]
- Telegram:@OAVOProxy
- WhatsApp:+86 178 6396 8105
可提供 OA辅助、OA辅导、VO辅助与 VO辅导。文章用于训练参考,不代表相关公司的官方流程;实际安排请以候选人收到的通知为准。
本文用于面试准备与训练复盘。公司名称仅用于标识题型素材主题,不代表官方合作或录用承诺。
预约一次训练复盘 ↗