力扣每日一题:1011.在D天内送达包裹的能力

简介: 力扣每日一题:1011.在D天内送达包裹的能力

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


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

难度:中等


题目:

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

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

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

提示:

  1. 1 <= D <= weights.length <= 50000
  2. 1 <= weights[i] <= 500


示例:

示例 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


分析

这道题看到用例范围就可想而知,必然需要使用二分查找。

类似的题目有:

875.爱吃香蕉的珂珂

遇到二分查找,我们应该关注的是如何确定左右边界,这道题很显然,右边界为sum(weight),那么左边界该如何确定呢?

既然我们需要装载货物,根据示例最少每次也要送一批货物出去,那么左边界很显然为max(weight)。

找到左右边界,套路执行二分查找就能获取最终结果了。


解题:

class Solution:
    def shipWithinDays(self, weights, D):
        left = max(weights)
        right = sum(weights)
        while left < right:
            mid = (left + right) // 2
            times, tmp = 1, 0
            for i in weights:
                if tmp + i > mid:
                    times += 1
                    tmp = 0
                tmp += i
                if times > D:
                    break
            if times <= D:
                right = mid
            else:
                left = mid + 1
        return left




相关文章
|
7月前
|
数据可视化 API Swift
全模态图像模型Nexus-Gen对齐GPT-4o!同时搞定,数据、训练框架、模型全面开源
OpenAI GPT-4o发布强大图片生成能力后,业界对大模型生图能力的探索向全模态方向倾斜,训练全模态模型成研发重点。
326 17
|
9月前
|
SQL 缓存 分布式计算
vivo 湖仓架构的性能提升之旅
聚焦 vivo 大数据多维分析面临的挑战、StarRocks 落地方案及应用收益。 在 **即席分析** 场景,StarRocks 使用占比达 70%,查询速度提升 3 倍,P50 耗时从 63.77 秒缩短至 22.30 秒,查询成功率接近 98%。 在 **敏捷 BI** 领域,StarRocks 已完成 25% 切换,月均查询成功数超 25 万,P90 查询时长缩短至 5 秒,相比 Presto 提升 75%。 在 **研发工具平台** 方面,StarRocks 支持准实时数据查询,数据可见性缩短至 3 分钟,查询加速使 P95 延迟降至 400 毫秒,开发效率提升 30%。
vivo 湖仓架构的性能提升之旅
|
12月前
|
存储 前端开发 UED
React 面包屑组件 Breadcrumb 详解
面包屑导航是现代Web应用中常见的UI元素,帮助用户了解当前位置并快速返回上级页面。本文介绍如何使用React构建面包屑组件,涵盖基本概念、实现方法及常见问题。通过函数式组件和钩子,结合React Router动态生成路径,处理嵌套路由,并确保可访问性。示例代码展示了静态和动态面包屑的实现,帮助开发者提升用户体验。
620 73
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的新闻网站附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的新闻网站附带文章和源代码设计说明文档ppt
60 1
基于ssm+vue.js+uniapp小程序的新闻网站附带文章和源代码设计说明文档ppt
|
算法 计算机视觉 C++
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
1227 0
|
安全 网络协议 网络安全
https证书免费申请
https证书免费申请
1248 0
|
消息中间件 存储 NoSQL
Golang微服务框架Kratos应用分布式任务队列Machinery
go machinery是一个基于分布式消息分发的异步任务队列框架,类似python中常用celery框架,主要用于异步任务和定时任务。
423 0
|
Web App开发 监控 前端开发
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下
【2月更文挑战第4天】《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下 今天的理性认识主要就是讲解和分享Fiddler的一些理论基础知识。其实这部分也没有什么,主要是给小伙伴或者童鞋们讲一些实际工作中的场景,然后隆重推出我们的猪脚(主角)-Fiddler。在这个网络信息时代里,计算机安全始终是一个让人揪心的问题,网络安全则有过之而无不及。许多电脑高手 经常利用 Fiddler 可以作为代理的这个功能去抓取会话并进行修改达到自己想要的目的。Fiddler是一个强大并且跨平台的HTTP(S)抓包神器,你可别拿去做坏事。它的英文名叫:Fiddler,
261 2
|
XML 设计模式 Java
性能测试(7)——Jmeter元件与组件
代表jmeter工具菜单中的一个子菜单(功能),比如HTTP请求、事务控制器、响应断言等,就是一个元件。元件下的子组件,比如逻辑控制器中有事务控制器,仅一次控制器,循环控制器等,这些都是元件,但它们被归类到逻辑控制器中,逻辑控制器就是组件。
548 0
|
缓存 Linux API
网络编程与select/poll/epoll服务器的实现(2)
I/O多路复用——select Q:什么是IO多路复? A:多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。 主要使用的方法有三种:
193 0

热门文章

最新文章