当前位置: 首页 > news >正文

如何建设企业微网站企业铭做网站

如何建设企业微网站,企业铭做网站,微博网站认证 备案名称,潍坊建设工程信息网站【LetMeFly】2398.预算内的最多机器人数目:滑动窗口单调队列——思路清晰的一篇题解 力扣题目链接:https://leetcode.cn/problems/maximum-number-of-robots-within-budget/ 你有 n 个机器人,给你两个下标从 0 开始的整数数组 chargeTimes …

【LetMeFly】2398.预算内的最多机器人数目:滑动窗口+单调队列——思路清晰的一篇题解

力扣题目链接:https://leetcode.cn/problems/maximum-number-of-robots-within-budget/

你有 n 个机器人,给你两个下标从 0 开始的整数数组 chargeTimes 和 runningCosts ,两者长度都为 n 。第 i 个机器人充电时间为 chargeTimes[i] 单位时间,花费 runningCosts[i] 单位时间运行。再给你一个整数 budget 。

运行 k 个机器人 总开销 是 max(chargeTimes) + k * sum(runningCosts) ,其中 max(chargeTimes) 是这 k 个机器人中最大充电时间,sum(runningCosts) 是这 k 个机器人的运行时间之和。

请你返回在 不超过 budget 的前提下,你 最多 可以 连续 运行的机器人数目为多少。

 

示例 1:

输入:chargeTimes = [3,6,1,3,4], runningCosts = [2,1,3,4,5], budget = 25
输出:3
解释:
可以在 budget 以内运行所有单个机器人或者连续运行 2 个机器人。
选择前 3 个机器人,可以得到答案最大值 3 。总开销是 max(3,6,1) + 3 * sum(2,1,3) = 6 + 3 * 6 = 24 ,小于 25 。
可以看出无法在 budget 以内连续运行超过 3 个机器人,所以我们返回 3 。

示例 2:

输入:chargeTimes = [11,12,19], runningCosts = [10,8,7], budget = 19
输出:0
解释:即使运行任何一个单个机器人,还是会超出 budget,所以我们返回 0 。

 

提示:

  • chargeTimes.length == runningCosts.length == n
  • 1 <= n <= 5 * 104
  • 1 <= chargeTimes[i], runningCosts[i] <= 105
  • 1 <= budget <= 1015

解题方法:滑动窗口+单调队列

如果题目要求是k * sum(runningCosts) ≤ budget应该怎么做呢?很简单,一个滑动窗口即可。

使用两个指针lr分别指向所选区间的左端点和右端点,每次右指针r向右移动一位,若窗口中所选元素的k * sum(runningCosts) > budget,则不断往后移动左指针,直到k * sum(runningCosts) ≤ budget为止,就得到了以r为右端点时,最大的可选机器人数。

lr的元素是被选中的元素,被称为“窗口”。这得益于窗口中元素数量越多,k * sum(runningCosts)就越大。

由于左指针和右指针都至多遍历一次数组,所以总时间复杂度为 O ( n ) O(n) O(n)

但是这道题的总开销是max(chargeTimes) + k * sum(runningCosts),而不是k * sum(runningCosts)k = r - l + 1,而sum(runningCosts)只需要在移动左右指针的时候使用一个变量来维护即可在 O ( 1 ) O(1) O(1)的时间内得到。对于一个窗口,max(chargeTimes)如何在 O ( 1 ) O(1) O(1)的时间内得到呢?这就需要引入单调队列。

使用一个单调递减队列,保持越靠近队首的元素严格靠近越靠近队尾的元素。

具体来说,当r加入窗口时,若chargeTimes[r] > 队尾元素,则队尾元素不断出栈。之后再将r入栈。这样,栈中的元素就保持了单调递减。而当l退出窗口时,如果队首元素就是l,则l出队。

这样做有一个好处,由于队列是单调递减的,所以队首元素就是窗口中chargeTimes最大的那个元素。诶,max(chargeTimes)也能在 O ( 1 ) O(1) O(1)时间复杂度内得到了,问题解决。

注意,队列的作用只是为了计算窗口中的max(chargeTimes)。若队列中一个元素被chargeTimes更大的r“顶”出队列,则并不代表其不在窗口中了,而只是说明其chargeTimes值比较小。

  • 时间复杂度 O ( l e n ( c h a r g e T i m e s ) ) O(len(chargeTimes)) O(len(chargeTimes))
  • 空间复杂度 O ( l e n ( c h a r g e T i m e s ) ) O(len(chargeTimes)) O(len(chargeTimes))

AC代码

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/142218259

http://www.yayakq.cn/news/53314/

相关文章:

  • 专业营销网站费用网站ping怎么做
  • 小榄网站wordpress怎么重装
  • 网站如何查看浏览量郑州响应式建站
  • 网站建设教程免费湖南岚鸿erp系统是什么软件有哪些
  • 用jsp做的汽车网站宁波seo优化定制
  • 网站改版对优化的影响动漫制作技术与动漫设计
  • dw2019怎么做网站宝尊电商代运营入口
  • 苏州做网站的专业公司哪家好教人做甜点的网站
  • 学校网站班级网页建设制度南充网站建设迅达网络
  • 外贸网站建设哪家公司比较好网络工程就业前景好吗
  • 网站建设中正在为您转专业模板建站价格
  • 推荐成都网站建设选择网站设计公司佛山
  • 宜昌网站建设平台用wordpress做企业网站
  • dw可以用来做网站吗画室网站模板
  • 广东网站设计公司电话网站有收录没排名
  • 网站建设重庆做某健身房网站的设计与实现
  • 做电影网站用的云盘深圳梵高网站建设服务
  • 网站备案在哪个部门中国建设银行网站的发展
  • 国内黑色风格的网站wordpress插件 图片
  • e4a做网站WordPress高级版破解
  • 昆明网站多端小程序设计怎么上传网站地图
  • 什么类型的公司需要做建设网站的搜索引擎优化叫什么
  • 黔东网站建设衡水哪有建网站的吗
  • 旅游网站排名相关推荐医院网站建设官网
  • wordpress站点logo设置免费网站发布怎么做的
  • 浙江省建设工程质量安全协会网站湖南专业做网站公司
  • 找印度人做网站自适应企业建站企业
  • 什么网站可以做报名系统wordpress近期文章小工具
  • 珠海本地网站设计公司和动物做的网站
  • 广州做鞋的网站wordpress 调用链接