← 返回博客列表
DoorDash

DoorDash VO:Dasher 最小負載容量

2025-11-24

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獲得真題