SDE Summer Intern · VO Coding

Amazon Coding:停车事件峰值与漏扫 Exit,哪些区间能确定?

按车配对生成半开会话、同时间事件批处理,区分完整日志峰值与缺失退出下的上界。

题目重点:按车配对生成半开会话、同时间事件批处理,区分完整日志峰值与缺失退出下的上界。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 先定义时间单位,最大停留H=2小时按单位转换;会话[start,end)表示exit时已不占车位。
  • 完整日志训练需要窗口起点已知occupancy、entry/exit能配对;孤立exit和重复entry进入异常清单,不能静默当完整数据。
  • 漏扫exit只给最大停留时长,真实离开时间未知;用entry+H补exit得到可能占用上界,不是已知真实停满2小时。若题目要求强制按超时补exit,须由正式合同明确。

解题路线

  1. 事件按时间排序并按车辆ID组装会话状态。一个车先entry1、exit10、entry11意味着两次访问;只按ID去重会删真实第二次。重复扫码需要eventId/业务政策,不按同车全删。
  2. 在完整会话上生成start+1/end−1事件。每个时间戳先合并净变化,再把变化后的count用于[t,nextT)。这避免同一时刻一车出一车进的假峰。
  3. 找最大count同时记录所有持续正长度区间;相邻区间count均为最大可拼接,分离峰值要返回多个。不要把单个事件瞬间当一段占用,也不要只返回首次峰。
  4. 漏扫会话若entry=a且没有后续exit,真实结束≤a+H;若同车再entry=b,结束还应≤b。按min(a+H,b)作最晚结束给上界,但没有最小停留时长时正时长占用下界很弱。已观测的有效exit应保留,不能一律改成2小时。
  5. 原示例车2只有exit20:可能窗口前已进入,也可能entry丢失/错误事件。若只知道exit scanner有问题,不能凭空推其entry=18;需窗口初始车辆清单或说明输出只算可配对会话。
  6. 给调用方分开返回确证峰值、按最晚exit假设的上界和异常项。若确实要求唯一精确峰值但证据不足,应说明不可识别,并请求初始状态/补扫政策,而非输出编造时间段。

手动走一遍

完整会话[1,10)、[5,12)、[10,11)在[5,11)均为2辆,同刻10出/进不产生3辆;可合并两个相邻峰段。缺exit的entry0在最多停2小时约束下,离开10分钟与110分钟都合法,和另一车1小时进入时会产生不同真实峰值,所以仅补2小时无法恢复真值。

规模与取舍

E事件排序O(E log E),配对/聚合O(E),会话与异常O(E)空间。已排序输入可流式处理,但乱序需watermark/迟到政策,不能在收到一个exit就永久封口所有过去区间。

易错点与追问

容易失分的边界

  • 忽略孤立exit假定停车场空。
  • 同一ID只保留一条事件。
  • 相同时间逐条处理产生假峰。
  • 最多2小时写成实际2小时。
  • 只返回一个峰段。

继续深挖

  • 允许迟到事件怎样修订峰值?
  • 进入也漏扫时还能给什么上下界?
  • 初始车辆有剩余停留时长怎样建会话?
  • 重复扫码如何用eventId幂等?
✓已复制微信号!