Waymo面试真题:Rain Drops覆盖区间问题 – 面试辅助 – VO 代面 – 一亩三分地

You are given a one-dimensional stretch of pavement represented by a closed interval [pavement_start, pavement_end].

You are also given an ordered list of raindrops, where each drop wets its own segment [drop_start, drop_end].

The raindrops fall sequentially, one after another, in the exact order provided in the list.

Return the 1-based index of the first drop that causes the union of all covered segments to fully contain the pavement.

If the pavement is never fully covered, return -1.


给你一段地面区间 [start, end],还有一堆“雨滴”,每个雨滴会覆盖一个小区间。

雨滴是一个一个按顺序落下的。

问题是:
👉 第几个雨滴落下之后,所有雨滴覆盖的范围合起来,刚好把整段地面完全覆盖了?

如果一直到最后都没覆盖完整,就返回 -1。


面试官一上来没有任何提示,直接丢题。

候选人确认边界:

“区间是闭区间吗?会有负数吗?drop 可以超出 pavement 吗?”

面试官点头,说:

“Yes, drops can be outside, only intersection matters.”

这个信息很关键——
👉 不需要关心完全在外面的部分,只要能贡献覆盖就行。


候选人一开始想的是:

“我每来一个 drop,就把所有区间 merge 一次,然后看有没有覆盖整个 pavement。”

这其实是很多人第一反应。

问题在哪?

每次 merge 全部区间,复杂度会炸(O(n²)级别)

面试官这里没有打断,只是问了一句:

“Can we do better than re-merging everything every time?”


候选人停了一下,开始换思路:

其实我们根本不需要维护所有区间
我们只需要知道:当前已经连续覆盖到哪里了

于是思路变成:

  1. 初始化一个当前覆盖区间 [cur_start, cur_end]
  2. 每来一个 drop:
    • 如果它能“接上”当前覆盖(有交集或能延伸)
    • 就更新 cur_end
  3. 一旦 cur_start <= pavement_startcur_end >= pavement_end
    直接返回当前 index

面试官这里问了一个很关键的问题:

“What if drops come in a bad order?”

比如:

pavement: [0, 100]drops:
[50, 60]
[0, 10]
[10, 50]

如果你只按顺序“贪心延伸”,会出问题。

候选人这里卡了一下,然后意识到:

顺序是固定的,不能排序!

所以必须做到:

在“当前已有覆盖 + 新drop”之间做判断
而不是依赖全局排序


正确解法本质

这一题本质是在做:

动态区间合并 + 覆盖检测

但优化点在于:

不需要维护所有区间,只维护“当前有效覆盖范围”

关键判断只有两种:

1️⃣ 能接上当前覆盖

drop_start <= current_end

说明可以延伸


2️⃣ 完全没接上

那这个 drop 对当前覆盖没有贡献,可以忽略


🔥 面试中加的 follow-up

面试官继续加压:

👉 Follow-up 1

如果 drop 数量非常大(百万级),怎么办?

候选人回答:

👉 仍然是 O(n),因为只扫一遍
👉 不做排序,不做全量 merge


👉 Follow-up 2

如果 drop 是乱序,可以排序吗?

候选人说:

👉 如果允许重排,那就变成经典:

👉 区间覆盖问题(interval covering)

复杂度可以做到:

O(n log n)

👉 Follow-up 3

如果是二维呢(雨滴变成矩形)?

候选人说:

👉 直接复杂度爆炸
👉 需要 sweep line + segment tree

面试官点头,这里基本就过了。

如果你最近有 VO 面试,提前准备这些 真实题型和思路,会非常关键。

我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

Leave a Reply

Your email address will not be published. Required fields are marked *