算法第十天-在D天之内送达包裹的能力

在D天之内送达包裹的能力

题目要求


在这里插入图片描述

解题思路

二分解法(精确边界)
假定[D天内送完所有包裹的最低运力]为 a n s ans ans,那么在以 a n s ans ans为分割点的数轴上具有[二段性]:

  • 数值范围在 ( − ∞ , a n s ) (-∞,ans) ,ans的运力必然[不满足]D天内运送完所有包裹的要求
  • 数值范围在 ( a n s , ∞ ) (ans,∞) ans,的运力必然[满足]D天内送完所有包裹的要求

即我们可以通过[二分]来找到恰好满足D天内运送完所有包裹的分割点 a n s ans ans
接下来我们要确定二分的范围,由于不存在包裹拆分的情况,考虑如下两种边界情况:

  • 理论最低运力:只确保所有包裹能够被运送,自然也包括重量最大的包裹,此时理论最低运力为 m a x max max m a x max max为数组 w e i g h t s weights weights中的最大值
  • 理论最高运力:使得所有的包裹能够被运送,自然也包括重量最大的包裹,此时理论最低运力为 s u m sum sum s u m sum sum为数组 w e i g h t s weights weights的总和。

因此我们可以确定二分的范围为 [ m a x , s u m ] [max,sum] [max,sum]

代码

class Solution:def shipWithinDays(self, weights: List[int], D: int) -> int:max_m,sum_m = max(weights),sum(weights)l,r = max(max_m,sum_m//D),sum_mwhile l<r:mid = (l+r)>>1if self.check(weights,mid,D):r=midelse:l=mid+1return rdef check(self, ws, t, d):n = len(ws)i = cnt = 1total = ws[0]while i<n:while i<n and total + ws[i] <=t:total += ws[i]i +=1total =0cnt +=1return cnt -1 <= d

复杂度分析

时间复杂度: O ( n l o g ( ∑ w s [ i ] ) ) ) O(nlog(∑ ws[i]))) O(nlog(ws[i]))),check函数复杂度为 O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/321796.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 内存数据 Metrics 指标解读

过去从未仔细了解过使用 free、top 等命令时显式的内存信息&#xff0c;只关注了已用内存 / 可用内存。本文我们详解解读和标注一下各个数据项的含义&#xff0c;同时和 Ganglia 显式的数据做一个映射。开始前介绍一个小知识&#xff0c;很多查看内存的命令行工具都是 cat /pro…

drf知识--11

补充 # 研究simple-jwt提供的Token类&#xff1a; 1、RefreshToken:生成refresh token的类 2、AccessToken:生成refresh token的类 3、Token&#xff1a;他们俩的父类 4、str(RefreshToken的对象)---得到字符串 refresh token&#xff0c;Token类写了 …

PyQt5-控件之QDialog(UI-业务分离搭建自定义xDialog)

1.继承QtWidgets.QWidget自定义对话框 继承于QtWidgets.QWidget自定义一个对话框类&#xff1a;SelectingDlg class SelectingDlg(QtWidgets.QWidget): def __init__(self): super(SelectingDlg, self).__init__() self.initUI() def initUI(self):s…

WMS仓储管理系统如何优化急料处理流程

在当今快速发展的商业环境中&#xff0c;企业的运营效率和供应链管理面临着前所未有的挑战。尤其在面对急料处理这一环节时&#xff0c;许多企业都感到力不从心。为了满足生产线的连续运作、确保客户订单的及时交付&#xff0c;WMS仓储管理系统的急料处理流程优化成为了关键。本…

【Spark精讲】Spark on Hive性能优化

目录 第一章 1.1 集群配置概述 1.2 集群规划概述 第二章 Yarn配置 2.1 Yarn配置说明 yarn.nodemanager.resource.memory-mb yarn.nodemanager.resource.cpu-vcores yarn.scheduler.maximum-allocation-mb yarn.scheduler.minimum-allocation-mb 第三章 Spark的配置说…

UG装配-引用集

引用集是控制组件的图素在装配体中显示与隐藏 装配体体环境控制组件显示与隐藏的四种方式 1、图层 2、引用集 3、隐藏命令 Ctrl B 4、抑制&#xff0c;取消此组件装配&#xff0c;但保留操作在导航器方便启用 引用集有两种类型 1、UG自动创建的引用集 2、用户定义的引…

HarmonyOS页面和自定义组件生命周期

页面和自定义组件生命周期 在开始之前&#xff0c;我们先明确自定义组件和页面的关系&#xff1a; 自定义组件&#xff1a;Component装饰的UI单元&#xff0c;可以组合多个系统组件实现UI的复用。页面&#xff1a;即应用的UI页面。可以由一个或者多个自定义组件组成&#xff…

迟来的扫雷游戏

今天我们讲如何用C语言编写出一个简单扫雷&#xff0c;扫雷也算是一个比较原始的游戏了吧&#xff0c;那么我们今天就来实现他&#xff01; 首先我们要来缕一缕游戏框架 我们在代码中我们肯定会写许多函数来实现扫雷&#xff0c;那么我们为了简便看出游戏的运行逻辑&#xff0…

大创项目推荐 深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序

文章目录 0 简介1 背景意义2 数据集3 数据探索4 数据增广(数据集补充)5 垃圾图像分类5.1 迁移学习5.1.1 什么是迁移学习&#xff1f;5.1.2 为什么要迁移学习&#xff1f; 5.2 模型选择5.3 训练环境5.3.1 硬件配置5.3.2 软件配置 5.4 训练过程5.5 模型分类效果(PC端) 6 构建垃圾…

力扣刷题-二叉树-构建树

106.从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 中序遍历 inorder [9,3,15,20,7] 后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&#xff1a; 思路 参考&#xff1a;…

探秘Spring Bean的秘境:作用域篇【beans 三】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 探秘Spring Bean的秘境&#xff1a;作用域篇【beans 三】 前言单例作用域如何声明单例Bean&#xff1a;特点&#xff1a; 原型作用域如何声明原型Bean&#xff1a;特点&#xff1a; 会话作用域如何声明…

多台西门子PLC对接Oracle数据库,实现PLC与数据库双向数据通讯

智能网关IGT-DSER方便实现多台PLC与数据库之间的数据通讯&#xff0c;既可以读取PLC的数据上报到数据库&#xff0c;也可以从数据库查询数据后写入到PLC的寄存器。 网关安装在设备侧&#xff0c;与设备同时起停&#xff0c;不担心数据丢失&#xff1b;在断网、服务器维护上报数…