唐门绝技:暴雨梨花针最少发射次数 | 豆包MarsCode AI 刷题

102 阅读5分钟

问题描述

在唐门,外门弟子唐三发现了一种强大的暗器技巧,名为暴雨梨花针,它能在一条直线上摧毁所有目标。唐三在一本古籍中学习到了这门技巧,为了练习,他设置了若干个靶子在二维平面上。每个靶子是一条垂直于X轴的线段,由三个参数 x_{left}x_{right}y 描述,其中 y 是固定的高度,x_{left} 和 x_{right} 表示线段在X轴上的起止位置。

唐三的目标是使用尽可能少的暴雨梨花针来击中所有靶子。由于暴雨梨花针的珍贵,每次射击必须经济有效。每次射击暴雨梨花针都将从某个 x 值发射,能垂直上升到 y = 100

请你帮助唐三计算最少需要多少次射击,才能保证击中所有靶子。结果需对给定的 P 取余。


测试样例

样例1:

输入:k = 4, p = 100, target = [[10, 26, 3], [4, 8, 29], [1, 5, 8], [9, 9, 9]]
输出:3

样例2:

输入:k = 3, p = 100, target = [[10, 26, 3], [4, 8, 29], [1, 5, 8]]
输出:2

样例3:

输入:k = 5, p = 100, target = [[5, 15, 5], [1, 2, 3], [20, 25, 2], [6, 18, 2], [30, 40, 1]]
输出:4

样例4:

输入:k = 2, p = 100, target = [[0, 10, 5], [15, 20, 3]]
输出:2

样例5:

输入:k = 6, p = 100, target = [[3, 8, 10], [5, 10, 12], [1, 3, 14], [15, 18, 10], [20, 25, 10], [8, 12, 10]]
输出:4

问题理解

你需要计算最少需要多少次射击,才能保证击中所有靶子。每次射击暴雨梨花针都将从某个 x 值发射,能垂直上升到 y = 100。靶子是垂直于X轴的线段,由 x_leftx_right 和 y 描述。

数据结构选择

  1. 靶子排序:首先,我们可以按 x_right 对靶子进行排序。这样做的目的是为了确保我们每次射击都能覆盖尽可能多的靶子。

算法步骤

  1. 排序:按 x_right 对靶子进行排序。
  2. 贪心算法:从第一个靶子开始,记录当前射击的右边界 current_end。对于每个靶子,如果它的 x_left 大于 current_end,则需要新增一次射击,并更新 current_end 为当前靶子的 x_right
  3. 结果取模:最后,将射击次数对 p 取模。

关键点

  • 排序:按 x_right 排序是为了确保每次射击都能覆盖尽可能多的靶子。
  • 贪心策略:每次射击都选择当前能覆盖的最远右边界,这样可以保证射击次数最少

实现代码

def solution(k, p, target):
    # 按x_right排序
    target.sort(key=lambda x: x[1])
    
    shoot_count = 0
    current_end = -float('inf')
    
    for x_left, x_right, y in target:
        if x_left > current_end:  # 需要新增一次射击
            shoot_count += 1
            current_end = x_right  # 更新current_end到当前区间的x_right
    
    # 返回结果取模p
    return shoot_count % p

我们就成功通过了本题🤩

本次我们通过《唐门绝技:暴雨梨花针最少发射次数 》这道题目的解决过程展示了豆包MarsCode AI刷题平台的几个显著亮点:

  1. 算法推荐与指导:当用户在解决问题时遇到瓶颈,例如不知道如何有效统计特定范围内的二进制数中1的个数之和时,AI能够提供具体的算法建议,并给出详细的算法流程、伪代码及实现代码,极大地降低了学习和解决问题的门槛。
  2. 多语言支持与代码转换:虽然豆包MarsCode AI刷题平台可能最初只提供了某些编程语言的支持,但它具备强大的跨语言代码转换功能,可以将用户的C++代码转换成Java或Python等其他语言的等效代码。这一特性对于那些需要在不同语言环境间切换的开发者来说非常有用,确保了用户能够在任何平台上顺利提交解决方案。
  3. 实践性与即时反馈:通过实际编写代码并测试示例输入输出,用户可以在提交之前验证自己的解答是否正确。这种即时的反馈机制有助于加深理解,及时调整错误,提高学习效率。 通过豆包MarsCode AI刷题平台,我们可以看到AI刷题的强大之处,它不仅向我们提供思路提示,更给我们提供代码框架,我们需要做的就是往框架里面填写代码并添加一些自己的思考,这极大程度地提高了我们编写代码的效率,同时也拓宽了我们编写代码的思路。跟随AI刷题的步伐,我们的写代码的能力也会越来越强。豆包MarsCode AI刷题工具通过精选真题与个性化推荐功能,帮助我高效地掌握了复杂的算法知识,也提升了我的自学能力,是我学习过程中的得力助手。 综上所述,豆包MarsCode AI刷题平台具有精准的算法指导、灵活的多语言支持以及即时的实践反馈,为用户提供了一个高效、便捷且富有成效的学习环境。

好了,那么我们这一次的解析就到这里,后面会给大家展示豆包MarsCode AI刷题的更多功能