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

1921. 消灭怪物的最大数量

原题地址

解法一

排序+贪心即可。思想为先计算出每一个怪兽到达城市的时间,然后排序,有小到大进行消灭,此时的下标可视作时间。当怪兽到达城市的时间超过或等于当前时间时,即已经到达了城市,游戏失败,下标即为消灭了多少个怪兽。O(nlogn) 时间复杂度主要在排序上。

    int eliminateMaximum(vector<int> &dist, vector<int> &speed) {int length = dist.size();vector<int> times(length);for (int i = 0; i < length; i++) {times[i] = (dist[i] - 1) / speed[i] + 1;}sort(times.begin(), times.end());for (int i = 0; i < length; i++) {if (times[i] <= i)return i;}return length;}

解法二

排序还是过于粗暴,不优雅。进一步思考优化,首先如果怪物到达的时间比怪物总数大,可以忽略,因为会尽可能先消灭到达时间快的怪物,而在怪物总数的时间时已经可以把所有怪物消灭了。相较于排序,这个解法不排序,将怪物到达的时间计数,然后从最小的开始进行怪物消灭。这时的下标不代表时间了,需要额外使用变量记录当前时间。

    int eliminateMaximum(vector<int> &dist, vector<int> &speed) {int length = dist.size();vector<int> times(length,0);for (int i = 0; i < length; i++) {int time = (dist[i] - 1) / speed[i] + 1;if (time >= length) continue;times[time]++;}int time = 0;for (int i = 0; i < length; i++) {if(!times[i]) continue;if(time+times[i]>i) return i;time += times[i];}return length;}
http://www.lryc.cn/news/152345.html

相关文章:

  • 创建一个空的vue项目,配置及步骤
  • 一篇文章教会你如何编写一个简单的Shell脚本
  • SSM框架-spring
  • 聊一下C#中的lock
  • 学会Mybatis框架:让你的开发事半功倍【五.Mybatis关系映射】
  • 《TCP/IP网络编程》阅读笔记--基于Windows实现Hello Word服务器端和客户端
  • Java-Optional类
  • AJAX学习笔记1发送Get请求
  • Elasticsearch 高级搜索技巧和最佳实践
  • 解决 .csv 文件上传到 pgsql 的字符报错问题
  • linux自动挂载并添加用户权限
  • 【C++】学习STL中的stack和queue
  • Java捕获异常
  • 【LLM】快速开始 LangChain
  • Unity中立体声平移的应用
  • jupyter常用的方法以及快捷键
  • SQL Server 操作JSON数据库列
  • 拼多多开放平台的API接口可以获取拼多多电商数据。以下是API接口流程
  • 使用Docker安装和部署kkFileView
  • 胆囊结石3mm严重吗(解析胆囊结石的危害和处理方法)
  • 全新UI站长在线工具箱系统源码带后台开源版
  • maven的依赖下载不下来的几种解决方法
  • CAR-T商品化的第一步
  • yolov2相较于yolov1的改进
  • 如何在Spring Boot应用中使用Nacos实现动态更新数据源
  • 代码随想录算法训练营day1~18总结
  • 【炼气境】HashMap原理以及如何使用
  • QT基础教程之七Qt消息机制和事件
  • Python入门自学进阶-Web框架——40、redis、rabbitmq、git——3
  • skywalking agent监控java服务