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

【力扣每日一题】2023.9.3 消灭怪物的最大数量

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目比较长,我概括一下就是有一群怪物,每只怪物离城市的距离都不一样,并且靠近的速度也不一样,每次我们可以消灭一只,当怪物到达城市的时候我们就失败了,问我们最终可以消灭多少只怪物。

我的第一想法是直接模拟,不过做了一点小优化。我们每次都先将怪物的距离减去速度表示它们移动了,每次有到达城市的怪物(也就是距离城市小于等于0的)我们就记录下数量。最终我们比较一下到达城市的怪物和已经经过的轮数谁更大,这时候轮数就等于我们击杀的怪物数量,因为一轮只能杀一只怪物。如果达到城市的怪物数量大于我们击杀的数量,那么结束,我们返回击杀数即可。

我一开始觉得这么做应该勉强能过,因为对vector进行删除元素的操作很费时间,而这么操作不需要对数组进行删除元素的操作,虽然也是暴力模拟,但也不是单纯的模拟,不过结果还是超时了,我们就需要另外想一个办法。

我们先想想我们每轮需要击杀的怪物是哪一只,是离城市最近的吗?不是,就算一个怪物离城市很近,但是它的速度比较慢,那也是对我们暂时没有威胁的。

我们优先消灭的怪物是最快到达的怪物,所以我们可以把每个怪物到达城市所需花费的时间算出来,接着对花费时间从小到大升序排序,优先消灭靠前的怪物,不过我们并不需要知道具体是哪一只怪物,所以可以直接对存放花费时间的数组进行排序。

直接遍历排序后的数组,如果第 i 个元素小于等于 i ,那么就表示会有怪物在我们击杀它之前到达城市,这时候返回 i ,也就是轮数,同时也是等于我们击杀的怪物数量。

代码:

class Solution {
public:int eliminateMaximum(vector<int>& dist, vector<int>& speed) {//超时int res=0;while(res<dist.size()){int num=0;for(int i=0;i<dist.size();i++){dist[i]-=speed[i];   //预先让怪物先移动if(dist[i]<=0) num++;    //如果怪物距离小于等于0则表示到达城市,记录数量}res++;   //每轮至少可以击杀一个怪兽if(num>res) break;   //如果到达城市的怪物大于我们击杀的怪兽数,退出循环  }return res;int n=dist.size();vector<int>cache(n);for(int i=0;i<n;i++){   //提前计算出每只怪物到达城市需要多久cache[i]=dist[i]/speed[i]+(dist[i]%speed[i]!=0);}//按照到达的先后顺序升序排序sort(cache.begin(),cache.end());for(int i=0;i<n;i++){//如果有怪物达到的时间小于等于当前轮数,那么返回当前轮数if(cache[i]<=i) return i;}return n;}
};

http://www.lryc.cn/news/156497.html

相关文章:

  • Python入门教程 | Python3 列表(List)
  • Java低代码开发:jvs-list(列表引擎)功能(一)配置说明
  • UI自动化之关键字驱动
  • 前端高性能渲染 — 虚拟列表
  • 防水出色的骨传导耳机,更适合户外运动,南卡Runner Pro 4S体验
  • docker快速安装-docker一键安装脚本
  • 1584 - Circular Sequence (UVA)
  • Revit SDK:Selections 选择
  • K8s中的RBAC(Role-Based Access Control)
  • 肖sir__设计测试用例方法之经验测试方法09_(黑盒测试)
  • Python爬虫:下载小红书无水印图片、视频
  • 【小沐学Unity3d】3ds Max 多维子材质编辑(Multi/Sub-object)
  • # Go学习-Day8
  • Maven编译java及解决程序包org.apache.logging.log4j不存在问题
  • 【小吉测评】高效简洁的数据库管控平台—CloudQuery
  • 获取微信小程序二维码的bug
  • Linux之Shell(一)
  • 解决拦截器抛出异常处理类的500状态码Html默认格式响应 !
  • 搭建PyTorch神经网络进行气温预测
  • Qt Creato配置PCL库
  • 从阿里到字节跳动,这3年外包做完,我这人生算是彻底废了......
  • 在汽车行业中如何脱颖而出?使用聊天机器人是关键
  • Go语言最全面试题,拿offer全靠它,附带免积分下载pdf
  • 虚拟机Linux20.04磁盘扩展
  • 类欧几里得算法
  • c++读取和存储文件,对文件操作
  • InfluxDB API -- InfluxDB笔记四
  • 数据结构 - 单链表
  • 化繁为简 面板式空调网关亮相上海智能家居展 智哪儿专访青岛中弘赵哲海
  • 4G版本云音响设置教程阿里云平台版本