← 返回博客列表
DoorDash

DoorDash VO 面试题:Dasher 最小负载容量(Binary Search + 贪心可行性检查)

2025-11-24

# DoorDash VO 面试题:Dasher 最小负载容量(Binary Search + 贪心可行性检查)

oavoservice 原创讲解:典型“二分答案”题,关键是把可行性写成单调函数。

题目(改写版)

给你 orders[i] 表示第 i 家餐厅需要处理的订单量。你有 d 个 dasher。

规则:

问最小的 k 是多少,使得所有订单都能被 d 个 dasher 覆盖。

关键观察:可行性检查

如果某个餐厅订单量为 x,每个 dasher 最多处理 k,那么该餐厅需要的 dashers 数量:

need = ceil(x / k)

把所有餐厅的 need 相加,若 sum_need <= d,则 k 可行。

随着 k 增大,sum_need 单调不增,所以可以二分。

复杂度

Python 参考实现

from math import ceil


def min_capacity(orders, d):
    if not orders:
        return 0

    # 下界:至少要能处理某个餐厅的 1 个订单;更紧的下界是 max(ceil(x/d)) 但这里用 1 或 max(orders)//d 也行
    lo, hi = 1, max(orders)

    def feasible(k):
        total = 0
        for x in orders:
            total += (x + k - 1) // k  # ceil
            if total > d:
                return False
        return True

    while lo < hi:
        mid = (lo + hi) // 2
        if feasible(mid):
            hi = mid
        else:
            lo = mid + 1

    return lo

面试官常问


DoorDash 这类题非常喜欢用来考“二分答案”套路。oavoservice 的训练重点是:把业务约束翻译成 ceil 公式,然后秒写 feasible


需要面试真题? 立刻联系微信 Coding0201,获得真题