在D天内送达包裹的能力(LeetCode)

题目

        传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。

        传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量(weights)的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。

        返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。

解题

def can_ship_in_days(weights, capacity, days):
    current_load = 0
    days_needed = 1

    for weight in weights:
        if current_load + weight > capacity:
            days_needed += 1
            current_load = 0
        current_load += weight

        if days_needed > days:
            return False

    return True


def shipWithinDays(weights, days):
    left = max(weights)
    right = sum(weights)

    while left < right:
        mid = (left + right) // 2

        if can_ship_in_days(weights, mid, days):
            right = mid
        else:
            left = mid + 1

    return left


# 示例输入
weights = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
days = 5

# 输出
print(shipWithinDays(weights, days))  # 输出: 15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值