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

Tag

【贪心】【排序】【数组】【2023-09-03】


题目来源

1921. 消灭怪物的最大数量


题目解读

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),排序需要占用的额外空间。


写在最后

以上就是本篇文章的内容了,感谢您的阅读。🍗🍗🍗

如果感到有所收获的话可以给博主点一个 👍 哦。

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出。💬💬💬

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的消灭星星游戏的代码示例,使用Python语言和Pygame库实现: ```python import pygame import random # 初始化Pygame库 pygame.init() # 定义游戏窗口的宽度和高度 window_width = 640 window_height = 480 # 创建游戏窗口 window = pygame.display.set_mode((window_width, window_height)) # 设置游戏窗口标题 pygame.display.set_caption("消灭星星") # 定义星星列表 stars = [] # 定义星星的颜色和大小 star_colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255)] star_sizes = [20, 30, 40] # 定义消灭星星的函数 def destroy_star(pos): global stars for star in stars: if star["rect"].collidepoint(pos): stars.remove(star) # 创建星星 for i in range(10): x = random.randint(0, window_width) y = random.randint(0, window_height) color = random.choice(star_colors) size = random.choice(star_sizes) rect = pygame.Rect(x, y, size, size) star = {"color": color, "rect": rect} stars.append(star) # 游戏循环 while True: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() if event.type == pygame.MOUSEBUTTONDOWN: # 获取鼠标点击位置 pos = pygame.mouse.get_pos() # 消灭星星 destroy_star(pos) # 填充游戏窗口背景色 window.fill((255, 255, 255)) # 绘制星星 for star in stars: pygame.draw.rect(window, star["color"], star["rect"]) # 更新游戏窗口 pygame.display.update() ``` 这个游戏的实现比较简单,通过随机生成星星的位置、颜色和大小,然后在游戏窗口中绘制出来,然后当玩家点击鼠标时,判断鼠标点击位置是否在星星的矩形范围内,如果是,则将该星星从列表中移除。通过不断绘制和更新游戏窗口,就可以实现一个简单的消灭星星游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wang_nn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值