首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LC *1011. 在 D 天内送达包裹的能力(二分)

LC *1011. 在 D 天内送达包裹的能力(二分)

作者头像
SakuraTears
发布2022-01-13 14:52:43
发布2022-01-13 14:52:43
4510
举报

题目

思路

船的承重一定是>=货物中最重的那个,<=所有货物的总重。 所以就可以采用二分法确定船的承重,假设船的承重为x,y天运完,if (y > D): x应该增加 else: x应该减少。y == D,x可以直接输出答案。

二分的区间为(货物中最重的, 货物的总重) 定义day为承重为mid时的天数,num为这一天已经已经放在船上的货物和。

每一天应该运送的货物应该在小于等于承重的情况下尽可能多的运送,所以当num + 今天的货物重量 > mid时今天能运送的货物就达到了上限。

代码语言:javascript
复制
class Solution {
public:
    int shipWithinDays(vector<int>& weights, int D) {
        int left = 0, right = 0;
        for (int w : weights) {
            left = max(left, w);
            right += w;
        }
        while (left < right) {
            int mid = (left + right) / 2;
            int day = 1, num = 0;
            for (int w : weights) {
                if (num + w > mid) {
                    day++;
                    num = 0;
                }
                num += w;
            }
            if (day > D) {
                left = mid + 1;
            }
            else {
                right = mid;
            }
        }
        return left;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年04月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档