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

我第一个手搓的hard的单调队列题目......灵神yyds

思路解析:

        我做的时候感觉这个题目有点歧义,我以为他的连续运行是时间上连续,所以我开始写的代码是选择最多的子序列(可以不连续),使得不超过budget,这个求最多子序列的代码会在最后给出,不保证完全正确(因为没有太多测试点),但是逻辑上是没问题的,可以作为思路看看.

        下面说说这个 要求连续的子序列 的个数最大值怎么求解

        首先数据量5*1e4最多是O(nlogn)

        注意到每次right(子序列的右边界)加一之后,左边界都可能不变或者回缩,所以我们可以使用滑动窗口的思想,那么因为max(chargeTimes)比较难求,耗时较长,所以我们可以使用单调队列来维护最大值,来实现O(1)时间内取出当前最大chargeTimes, (by the way, 我们也可以使用稀疏表来实现O(1),但是建表的过程是O(nlogn)的,不如单调队列,感兴趣的童鞋可以试试), 而对于sum(runningCosts),我们只需要一个sums记录一下即可,至于数目,我们可以使用一个cur表示当前的数量,使用ans=max(ans,cur)更新即可.

        下面具体说一说单调队列的维护:

        首先我们需要让单调队列来维护当前的最大值,也就是遇到比队尾小的直接加入,遇到比队尾大的,把队尾弹出再加入. 至于相等的元素可以直接加入,也可以把和它相等的元素都弹出去之后,再加入.这是因为我们不关注最大值的个数,只关注最大值,就算当前队列里面最大值的个数不对,但是他依然能够成功维护当前窗口最大值,这是因为我们当前的窗口是 [left, i],只有left等于dq.front()才会pop_front().

        之后我们判断当前区间的[left, i]是否再预算里面, yes-> 更新ans,  no->说明左边界要右移,但是我们每轮循环至多只用移动一位(因为 i 每次也只是加一),再更新sum,如果left等于dq.front(),那么说明当前front不能用了,pop_front.           

        by the way,这也是单调队列的第二种模板,也即使用left和i表示当前区间,利用滑动窗口的特点,每次左边界不变或者收缩,不变的时候更新ans,收缩的时候判断当前队头还能不能使用

代码如下

class Solution {
public: int maximumRobots(vector<int>& chargeTimes, vector<int>& runningCosts, long long budget) {int len=chargeTimes.size();deque<int> dq;int ans=0,left=0; long long sum=0;for(int i=0;i<len;i++){while(dq.size() && chargeTimes[i]>=chargeTimes[dq.back()]){dq.pop_back();}dq.push_back(i);sum+=runningCosts[i];if(chargeTimes[dq.front()]+(i-left+1)*sum <= budget){ans=max(ans,i-left+1);}else{ sum-=runningCosts[left];if(left==dq.front()) dq.pop_front();left++;}}return ans;}
};

        那么如果我们要求的是 不连续的最长子序列呢, 那么首先我们需要按照runningcosts来做一个升序排序,这样我们如果想要得到更长的子序列,就需要pop出去当前chargeTimes最大的元素,这样才有可能得到一个更长的序列,代码如下:

        而且注意这个时候在单调队列中,新元素如果和队尾相等,那么就应该加入进去,而不能pop_back()掉相等的元素了,因为这个时候用的就不是[left, i]的模板了,就没有if(left==dq.front())来保障最大值的安全了,每次不满足条件我们都是pop_front(),所以最大值的个数同样重要

class Solution {
public: 
//我现在的这个做法是求的是不连续的最大int maximumRobots(vector<int>& chargeTimes, vector<int>& runningCosts, long long budget) {int len=chargeTimes.size();vector<int> index;for(int i=0;i<len;i++) index.push_back(i);sort(index.begin(),index.end(),[&](const int a,const int b){if(runningCosts[a]!=runningCosts[b]) return runningCosts[a]<runningCosts[b];else return chargeTimes[a]<chargeTimes[b];});deque<int> dq;int ans=0,cur=0; long long sum=0;for(int i=0;i<len;i++){int idx=index[i];while(dq.size() && chargeTimes[idx]>chargeTimes[dq.back()]){dq.pop_back();}dq.push_back(idx);sum+=runningCosts[idx];if(chargeTimes[dq.front()]+(cur+1)*sum < budget){cur++;ans=max(ans,cur);}else{//sum-=runningCosts[dq.front()];dq.pop_front();cur--;}}return ans;}
};

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

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

相关文章

element-ui et -i 编译默认主题报错:ReferenceError: primordials is not defined

报错信息如下 fs.js:40 } primordials;^ ReferenceError: primordials is not defined导致这个问题的原因&#xff1a;node和gulp版本冲突&#xff01;&#xff01; 我使用的是node 14版本 解决方法&#xff1a; 看了好几个帖子&#xff0c;都推荐使用node 11.15.0版本&am…

华为ensp中BGP(边界网关协议)基础原理及配置命令

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月27日10点04分 BGP&#xff08;边界网关协议&#xff09;是一种路由协议&#xff0c;用于在互联网中的不同自治系统&#xff08;AS&#xff09;之间交换路由信息。它…

浅谈操作系统中的重要概念——线程

文章目录 一、进程概念产生的原因二、进程的弊端三、线程3.1、线程复用结构体PCB3.2、多线程弊端3.2.1、拖慢程序的效率3.2.2、产生线程安全问题3.2.3、导致整个进程终止 3.3、怎么判断一个线程是否执行完毕&#xff1f;&#xff1f;3.4、怎么终止一个线程&#xff1f;&#xf…

【学习笔记二十八】EWM和QM集成的后台配置和前台展示

一、EWM和QM集成概述 SAP EWM(扩展仓库管理)和QM(质量管理)的集成是SAP系统中一个重要的特性,它允许企业在仓库管理过程中实现质量控制和检验流程的自动化。以下是关于EWM和QM集成的一些关键点概述: 集成优势:通过集成,企业可以确保仓库中的物料在收货、存储、…

csdn的复制代码功能如何实现

页面布局分析&#xff1a; 按钮在文本框里面&#xff0c;所以文本框是父元素&#xff0c;按钮是子元素。要使得按钮在文本框的右上角&#xff0c;需要使用绝对定位。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">…

实现ALV页眉页脚

1、文档介绍 在ALV中&#xff0c;可以通过增加页眉和页脚&#xff0c;丰富ALV的展示。除了基本的页眉和页脚&#xff0c;还可以通过插入HTML代码的方式展示更加丰富的页眉和页脚&#xff0c;本篇文章将介绍ALV和OOALV中页眉页脚的使用。 2、ALV页眉页脚 效果如下 2.1、显示内…

长图高效切割新体验:支持按随机宽度灵活裁切,释放无限创意与效率

图像的传播已经成为我们日常生活的一部分。而长图&#xff0c;作为一种特殊的图像形式&#xff0c;其独特的展示方式能够吸引更多的目光。但是&#xff0c;如何将长图高效切割&#xff0c;以展现其独特的魅力呢&#xff1f;现在&#xff0c;我们为您带来了一款支持按随机宽度切…

怎么找回录音文件?这4个方法实用又简单!

“我有一份比较重要的录音文件保存在电脑上了&#xff0c;不知道是因为误删还是什么原因&#xff0c;这个文件丢失了&#xff0c;我现在有什么比较好的方法可以找回这个文件吗&#xff1f;” 录音文件是我们日常生活中经常使用的文件类型&#xff0c;无论是会议记录、学习笔记还…

论机器学习(ML)在网络安全中的重要性

机器学习是什么&#xff1f; 机器学习(ML)是人工智能的一个分支&#xff0c;它使用算法来使计算机系统能够自动地从数据和经验中进行学习&#xff0c;并改进其性能&#xff0c;而无需进行明确的编程。机器学习涉及对大量数据的分析&#xff0c;通过识别数据中的模式来做出预测…

MySQL/MariaDB 如何查看当前的用户

MySQL 的所有数据库用户信息是存储在 user 数据表中的。 可以在登录成功数据后运行 SQL&#xff1a; MariaDB [(none)]> select user,host from user;就可以查看到数据中的所有用户信息。 MariaDB [(none)]> select user,host from user; ERROR 1046 (3D000): No databa…

数据集笔记:geolife staypoint聚合的location 最近的10个其他location

数据集&#xff1a;处理geolife数据-CSDN博客 这边的stations&#xff0c;找到每个station 最近的其他10个station 1 读取数据 假设已经读完了&#xff0c;就是locations 2 保留有用的列 locations.drop([center,user_id],axis1,inplaceTrue) locations 3 加载几何形状 使用…

27 - 数据传送指令

---- 整理自B站UP主 踌躇月光 的视频 文章目录 1. CPU 电路2. 数据传送指令的几种情况3. 实验工程4. 实验结果 1. CPU 电路 2. 数据传送指令的几种情况 # program.asm; 1. ; MOV A, 5;; 2. ; MOV A, B;; 3. ; MOV A, [5];; 4. ; MOV B, 6 ; MOV A, [B]; 5. ; MOV [0x2f], 5;; …

Zynq 7000 系列中成功执行BootROM的条件

Zynq 7000设备的启动需要正确的电压序列和I/O引脚控制。BootROM的流程由复位类型、启动模式引脚设置以及启动映像来控制。BootROM对所选启动设备的引脚连接有特定的要求。 Zynq 7000 SoC设备具有电源、时钟和复位要求&#xff0c;这些要求必须得到满足&#xff0c;才能成功执行…

每日OJ题_DFS回溯剪枝⑦_力扣77. 组合

目录 力扣77. 组合 解析代码 力扣77. 组合 77. 组合 难度 中等 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,…

Oracle集群-常用查询及操作(工作日常整理)

1.Oracle集群状态 select * from gv$instance; 示例结果&#xff1a; 2.Oracle集群-增大表空间 常见问题&#xff1a; 导入时或使用时&#xff0c;提示无法extend table ,增加表空间即可 常用操作&#xff1a; 1&#xff09;查询表空间 select * from dba_tablespaces; --…

数据结构——二叉树的顺序存储(堆)(C++实现)

数据结构——二叉树的顺序存储&#xff08;堆&#xff09;&#xff08;C实现&#xff09; 二叉树可以顺序存储的前提堆的定义堆的分类大根堆小根堆 整体结构把握两种调整算法向上调整算法递归版本 非递归版本向下调整算法非递归版本 向上调整算法和向下调整算法的比较 我们接着…

owasp top 10 越权漏洞·

指的是用户权限不明晰。 垂直越权&#xff1a;低权限用户&#xff0c;在无任何身份校验的情况下&#xff0c;能够使用高权 限&#xff08;不属于自己&#xff09;模块&#xff08;功能&#xff09;&#xff0c;或访问高权限拥有的数据&#xff1b; 水平越权&#xff1a;指相同…

华为MRS服务使用记录

背景&#xff1a;公司的业务需求是使用华为的这一套成品来进行开发&#xff0c;使用中发现&#xff0c;这个产品跟原生的Hadoop的那一套的使用&#xff0c;还是有很大的区别的&#xff0c;现记录一下&#xff0c;避免以后忘了 一、原始代码的下载 下载地址&#xff1a;MRS样例…

UVa12313 A Tiny Raytracer

UVa12313 A Tiny Raytracer 题目链接题意分析AC 代码 题目链接 UVA - 12313 A Tiny Raytracer 题意 给出 《训练指南》题意翻译 本题的任务是实现一个小型光线追踪渲染器。场景由若干三角形网格&#xff08;triangle mesh&#xff09;组成&#xff0c;有且仅有一个点光源&…

R语言高级数据管理

一&#xff0c;数学函数 绝对值函数abs(x) sqrt(x) 开平方根 不小于某个数的最小整数ceiling(x) 不大于某个数的最大整数floor(x) 四舍五入round(x) sin(x) cos(x) log(x) 二&#xff0c;统计函数 求平均值 > x<-c(2,3,4,5,6,7,8,9,10) > mean(x) 求和 &g…