其他分享
首页 > 其他分享> > [LeetCode] 1011. Capacity To Ship Packages Within D Days 在D天内送达包裹的能力

[LeetCode] 1011. Capacity To Ship Packages Within D Days 在D天内送达包裹的能力

作者:互联网


A conveyor belt has packages that must be shipped from one port to another within D days.

The ith package on the conveyor belt has a weight of weights[i]. Each day, we load the ship with packages on the conveyor belt (in the order given by weights). We may not load more weight than the maximum weight capacity of the ship.

Return the least weight capacity of the ship that will result in all the packages on the conveyor belt being shipped within D days.

Example 1:

Input: weights = [1,2,3,4,5,6,7,8,9,10], D = 5
Output: 15
Explanation: A ship capacity of 15 is the minimum to ship all the packages in 5 days like this:
1st day: 1, 2, 3, 4, 5
2nd day: 6, 7
3rd day: 8
4th day: 9
5th day: 10

Note that the cargo must be shipped in the order given, so using a ship of capacity 14 and splitting the packages into parts like (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) is not allowed.

Example 2:

Input: weights = [3,2,2,4,1,4], D = 3
Output: 6
Explanation: A ship capacity of 6 is the minimum to ship all the packages in 3 days like this:
1st day: 3, 2
2nd day: 2, 4
3rd day: 1, 4

Example 3:

Input: weights = [1,2,3,1,1], D = 4
Output: 3
Explanation:
1st day: 1
2nd day: 2
3rd day: 3
4th day: 1, 1

Constraints:


这道题说是有一条传送带在运送包裹货物,每个包裹有各自的重量,每天要把若干包裹运送到货轮上,货轮有特定的承载量,要求在给定的D天内将所有货物装上货轮,问船的最小载重量是多少。首先来分析,由于船的载重量是固定的,而包裹在传送带上又只能按照顺序上传,并不能挑拣,所以一旦加上当前包裹超过了船的载重量,那么必须要放弃这个包裹,比较极端的例子就是,假如船的载重量是 50,现在船一已经装了一个重量为1的包裹,而下一个包裹重量是 50,那么这个包裹只能装在下一条船上。


class Solution {
public:
    int shipWithinDays(vector<int>& weights, int D) {
        int left = *max_element(weights.begin(), weights.end()), right = accumulate(weights.begin(), weights.end(), 0);
        while (left < right) {
            int mid = left + (right - left) / 2, cnt = 1, cur = 0;
            for (int w : weights) {
                cur += w;
                if (cur > mid) {
                    cur = w;
                    ++cnt;
                }
            }
            if (cnt > D) left = mid + 1;
            else right = mid;
        }
        return left;
    }
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/1011


参考资料:

https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/

https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/discuss/256737/C%2B%2B-Binary-Search

https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/discuss/256729/JavaC%2B%2BPython-Binary-Search


LeetCode All in One 题目讲解汇总(持续更新中...)

标签:Capacity,Within,Days,days,weights,capacity,ship,packages,day
来源: https://www.cnblogs.com/grandyang/p/14348179.html