最近一位同学刚面完 Uber VO,题目不难。
Problem
You are given a list of delivery intervals for Uber drivers. Each interval represents a delivery task with a start time and end time.
Return the minimum number of drivers required so that all deliveries can be completed without overlap.
Example 1:
Input: [[1,3],[2,4],[3,5]]
Output: 2
Example 2:
Input: [[1,2],[2,3]]
Output: 1
给你一堆订单时间段,每个订单有开始时间和结束时间。
一个司机同一时间只能送一个订单。
问:最少需要多少司机,才能把所有订单都完成?
[[1,3],[2,4],[3,5]] → 2个司机
面试官:
这题你怎么理解?
候选人:
就是看同一时间最多有多少订单在进行,对应就是最少司机数。
面试官:
对,那你怎么做?
第一反应要先讲思路:
候选人:
我会把开始时间和结束时间拆开分别排序。
然后用两个指针:
- 一个指向 start
- 一个指向 end
遍历 start:
- 如果当前 start < 当前 end → 需要新司机
- 否则 → 有司机空出来
1️⃣ 为什么排序?
因为你要按时间顺序处理“事件”
本质是 timeline 扫描
2️⃣ 为什么 start < end 要加司机?
说明有新的订单开始了,但之前的还没结束
产生 overlap
3️⃣ 如果 start == end 呢?
可以复用司机(重点细节)
Follow-up 1
如果每个订单有 priority,高优先级必须优先分配司机?
👉 解法:
用 min-heap 按结束时间 + priority 控制
Follow-up 2
如果司机可以提前接单(允许重叠一部分)?
👉 需要重新定义 overlap 条件
Follow-up 3
返回具体分配方案(哪个司机送哪些单)
👉 需要:
- heap 存司机可用时间
- 记录 assignment
如果你是准备 Uber / TikTok / DoorDash 这种 VO:
- 实时提示思路
- 帮你补充 edge case
- 关键点提醒(不影响你表达)
整个过程是“你在面试,我们在旁边同步辅助”。
如果你近期准备 TikTok / Meta / Google / Uber 等公司面试,可以提前准备这些高频题目。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

