1921. 消灭怪物的最大数量
Tag
【贪心】【排序】【数组】
题目来源
题目解读
dist[i]
是第 i
个怪兽与城市的初始距离,speed[i]
是第 i
个怪兽的移动距离。怪兽的目的是攻击城市,你的目的是阻止怪兽攻击城市,为此你可以使用一把武器来消灭任意一个怪兽,这种武器一分钟只能消灭一只怪兽。一旦有怪兽到达城市,你就失败了,请返回你在失败之前可以消灭怪兽的最大数量。如果你可以在所有怪兽到达城市之前将它们全部消灭,返回 n
。
解题思路
方法一:贪心+排序
贪心思想,先消灭先要到达的怪兽,怪兽到达城市的先后,我们使用时间来衡量,具体的使用 arrivalTime[i]
来表示怪兽 i
到达城市的时间,arrivalTime[i] = (dist[i] + speed[i] - 1) / speed[i]
。
接着对所有怪兽到达城市的时间进行升序排序,然后遍历 arrivalTime
数组:
- 如果
arrivalTime[i] <= i
,说明第i
的怪兽先到了城市,此时失败了,失败之前消灭的怪兽为i
只,于是返回i
; - 如果没有任何的
arrivalTime[i] <= i
,说明我们可以在所有怪兽到达城市之前将它们全部消灭,于是返回n
。
复杂度分析
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),排序花费的时间。
空间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),排序需要占用的额外空间。
写在最后
以上就是本篇文章的内容了,感谢您的阅读。???
如果感到有所收获的话可以给博主点一个 ? 哦。
如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出。???