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

leetcode 2398.预算内的最多机器人数目

2398.预算内的最多机器人数目

题意:

在这里插入图片描述

解析:

需要注意的是,题目询问中连续是子数组的意思,即求满足条件的最长子数组的长度。

因为是连续的,所以可以用双指针扫描整个数组。每次将右指针 r r r 向右移动一个位置,然后左指针 l l l 向右移动到满足 budget 限制的位置。

判断区间 [l,r] 是否满足budget 限制。在扫描时,可以用一个变量维护区间 cost 的和,也可以通过前缀和来得到 sum(cost)。除此之外,需要这段区间 times 的最大值,维护一个非严格递减的单调队列,队首元素是这段区间 times 的最大值。

在将左指针 l l l 右移的时候,需要判断单调队列队首元素是否已经失效。

代码:

int maximumRobots(vector<int>& chargeTimes, vector<int>& runningCosts, long long budget) {int n = chargeTimes.size();deque<int> q;long long sum = 0;int ans = 0;for(int l = 0, r = 0; r < n; r++){sum += runningCosts[r];while(q.size() && chargeTimes[q.back()] < chargeTimes[r])q.pop_back();q.push_back(r);while(q.size() && chargeTimes[q.front()] + (r-l+1) * sum > budget){sum -= runningCosts[l++];if(q.front() < l)q.pop_front();                 }ans = max(ans, r-l+1);}return ans;}

http://www.mrgr.cn/news/26083.html

相关文章:

  • Ready Go
  • 数据库基础知识---------------------------(1)
  • 【Qt笔记】QScrollArea控件详解
  • Web3入门指南:从基础概念到实际应用
  • N2011A叉车限速器如何实现超速报警且强制限速的
  • 【Flutter】⭐️UI库推荐! Flutter 中使用 dropdown_search实现下拉搜索效果
  • volatile关键字
  • 北京网页制作-网站策划
  • Shell:初识sed、awk
  • C++11第四弹:包装器
  • 干货分享,大厂内部压测方案设计
  • 详说 类和对象
  • 深入探索系统架构设计
  • 队列的实现(C语言)
  • 供应RM500UCNAB-D10-SNADA模块
  • Anaconda安装
  • 软件测试的类型
  • 图像分类架构
  • 外贸网站建设该怎么做
  • 数字化转型背景下低代码开发模式变革的研究