1. 题目

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

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

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

示例 1:
输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5
输出:15
解释:
船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:
第 1 天:1, 2, 3, 4, 5
第 2 天:6, 7
第 3 天:8
第 4 天:9
第 5 天:10
请注意,货物必须按照给定的顺序装运,因此使用载重能力为 14 的船舶并将包装
分成 (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) 是不允许的。 示例 2:
输入:weights = [3,2,2,4,1,4], D = 3
输出:6
解释:
船舶最低载重 6 就能够在 3 天内送达所有包裹,如下所示:
第 1 天:3, 2
第 2 天:2, 4
第 3 天:1, 4示例 3:
输入:weights = [1,2,3,1,1], D = 4
输出:3
解释:
第 1 天:1
第 2 天:2
第 3 天:3
第 4 天:1, 1提示:
1 <= D <= weights.length <= 50000
1 <= weights[i] <= 500

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

二分法求解装载能力

类似题目:
LeetCode LCP 12. 小张刷题计划(二分查找)
LeetCode 875. 爱吃香蕉的珂珂(二分查找)
LeetCode 5438. 制作 m 束花所需的最少天数(二分查找)

解法1

class Solution {public:int shipWithinDays(vector<int>& weights, int D) {int l = 0, r = 0, mid, i, n = weights.size();vector<int> prefixW(n);for(i = 0; i < n; ++i){l = max(l, weights[i]);r += weights[i];prefixW[i] = r;}while(l <= r){mid = l+((r-l)>>1);if(canFinish(prefixW,mid,D))r = mid-1;elsel = mid+1;}return l;}bool canFinish(vector<int>& prefixW, int cap, int D){int day = 1, w = 0;auto it = upper_bound(prefixW.begin(),prefixW.end(),cap);while(it != prefixW.end()){w = *(--it)+cap;it = upper_bound(prefixW.begin(),prefixW.end(),w);day++;if(day > D)break;}return day <= D;}
};

336 ms 26 MB

解法2

  • 直接给出更大的上下限,避免遍历一次数组
class Solution {public:int shipWithinDays(vector<int>& weights, int D) {int l = 1, r = 50000*500, mid;while(l <= r){mid = l+((r-l)>>1);if(canFinish(weights,mid,D))r = mid-1;elsel = mid+1;}return l;}bool canFinish(vector<int>& weights, int cap, int D){int day = 1, w = 0, i;for(i = 0; i < weights.size(); ++i){if(weights[i] > cap)return false;w += weights[i];if(w > cap){day++;i--;w = 0;}if(day > D)break;}return day <= D;}
};

116 ms 24.8 MB

LeetCode 1011. 在 D 天内送达包裹的能力(二分查找)相关推荐

  1. LeetCode 1011. 在 D 天内送达包裹的能力

    **题目描述:**传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i].每一天,我们都会按给出重量的顺序往传送带上装载包裹.我们装载的重量 ...

  2. leetcode 1011. 在 D 天内送达包裹的能力(二分法)

    传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i].每一天,我们都会按给出重量的顺序往传送带上装载包裹.我们装载的重量不会超过船的最大运 ...

  3. Leetcode 1011. Capacity To Ship Packages Within D Days 在 D 天内送达包裹的能力

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

  4. 在D天内送达包裹的能力

    文章目录 1.描述 2.关键字 3.思路 4.notes 5.复杂度 6.code 1.描述 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weight ...

  5. leetcode1011. 在 D 天内送达包裹的能力(二分查找)

    传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i].每一天,我们都会按给出重量的顺序往传送带上装载包裹.我们装载的重量不会超过船的最大运 ...

  6. 在 D 天内送达包裹的能力

    今天终于不是动规惹 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i].每一天,我们都会按给出重量的顺序往传送带上装载包裹.我们装载的重 ...

  7. leetcode 分享巧克力 java_LeetCode 1231. 分享巧克力(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你有一大块巧克力,它由一些甜度不完全相同的小块组成.我们用数组 sweetness 来表示每一小块的甜度. 你打算和 K 名朋友一起分享这块巧克力,所以你 ...

  8. Leetcode(5)——遍历,并查集,回溯法和二分查找

    格式: 题号+题名+简单思路+code 遍历 深度优先遍历和广度优先遍历 很多dfs可以用Union Find解决 T130: 被围绕的区域 DFS的写法 func solve(board [][]b ...

  9. leetcode 911. Online Election | 911. 在线选举(加强堆 + 二分查找)

    题目 https://leetcode.com/problems/online-election/ 题解 我的解法是,用预计算(加强堆,O(nlogn)) + 二分查找(用的自带TreeMap,查找复 ...

最新文章

  1. 深度学习:Opencv的BlobfromImage如何工作
  2. java串口发送16进制_串口发送数据——字符串发送与十六进制发送的区别
  3. 精解C++的switch语句
  4. GDCM:gdcm::Directory的测试程序
  5. 《新冠肺炎防治手册》来了!阿里巴巴联合“抗疫”一线专家发布
  6. matlab制作以太网数据接收上位机_3D激光扫描仪设计及数据处理
  7. JAVA获得天气json数据的方法,获取从天气预报接口返回回来的json数据
  8. Reddit 评级算法的工作原理
  9. poj 2352 Stars 树状数组
  10. MapReduce:详解Shuffle过程
  11. matlab 灰度化原理公式,MATLAB的Sobel图像边缘灰度值检测算法的详细公式和实现资料概述...
  12. ad敷铜后还有部分飞线_眼花缭乱!超级无敌的飞线大法,打造一把超低功耗无线机械键盘...
  13. EDG 官宣 Clearlove(明凯)正式退役成为教练,你有什么想说的?
  14. 表格用计算机做成横版的WPS,WPS表格怎么将表格横过来图文教程
  15. 索尼电视android9,索尼电视系统更新通知:解决升级到安卓9.0版本后bug问题
  16. python井字棋_python之井字棋游戏
  17. 马云也进军游戏了?还赚了上亿元,网友:马化腾先生怎么看呢?
  18. 大数据预测犯罪?不 是预防犯罪!
  19. 【面经】微软SWE暑期实习
  20. 2020浙江大学软件学院预推免经验

热门文章

  1. appsettings 连接oracle数据库,ABP .net core集成访问Oracle数据库
  2. mysql注入5.0以上_[Injection]对MYSQL 5.0服务器以上版本注入
  3. django html显示xml,如何将HTML与Django集成?
  4. 获取当前ip_教程丨WIN10系统下设置固定IP或动态IP
  5. php判断电脑浏览器模拟手机访问网页,在PC上测试移动端网站和模拟手机浏览器的5大方法...
  6. 5类6类7类网线对比_孩子们长高的黄金时期是从3月到5月,这阶段多吃6类食物长得快...
  7. 个人管理 - 书籍推荐(待读)
  8. c#: 任务栏进度显示(TaskbarManager)
  9. hdu 4280 最大流sap
  10. 【原创】oracle的tpc-c测试及方法