C++ 中找到射破所有气球所需的最少箭数

2025 年 5 月 12 日 | 阅读 4 分钟

在本文中,我们将讨论如何在 C++ 中找到射爆所有气球所需的最小箭数。

问题陈述

给定一个大小为 N 的 数组,其中 points[i] 表示一个气球覆盖 X 坐标在 points[i][0] 和 points[i][1] 之间的区域。Y 坐标无关紧要。每个气球都必须被射爆。一支箭可以从点 (x, 0) 射出,射爆满足条件 points[i][0] <= x <= points[i][1] 的任何气球。箭到达目标后垂直向上飞行。目标是找到射爆所有气球所需的最小箭数。

我们可以使用以下步骤来确定射爆每个气球所需的最小箭数:

  • 以其终点位置作为起点,对气球进行排序。
  • 设置一个变量来记录所需的箭数,另一个变量来记录气球当前的结束坐标。
  • 逐一检查所有已排序的气球。如果当前气球的起始坐标大于之前存储的结束坐标,则将结束坐标更新为当前气球的结束坐标,并增加箭数。
  • 如果当前气球的起始坐标位于存储的结束坐标范围内,则将存储的结束坐标更新为保存的结束坐标和当前气球的结束坐标之间的较小值。

示例

  1. 气球:{{10, 16}, {2, 8}, {1, 6}, {7, 12}}
    按结束坐标排序:{{1, 6}, {2, 8}, {7, 12}, {10, 16}}
    射爆所有气球所需的箭数:2
  2. 气球:{{1, 2}, {3, 4}, {5, 6}, {7, 8}}
    按结束坐标排序:{{1, 2}, {3, 4}, {5, 6}, {7, 8}}
    射爆所有气球所需的箭数:4
  3. 气球:{{1, 2}, {2, 3}, {3, 4}, {4, 5}}
    按结束坐标排序:{{1, 2}, {2, 3}, {3, 4}, {4, 5}}
    射爆所有气球所需的箭数: 2

伪代码

示例 1

查看一个示例程序,以查找射爆 cpp 中所有气球所需的最小箭数

输出

Find Minimum Number of Arrows Needed To Burst All Balloons in C++

示例 2

让我们再举一个例子,找出在 C++ 中射爆所有气球所需的最小箭数。

输出

Find Minimum Number of Arrows Needed To Burst All Balloons in C++

示例 3

让我们再看一个例子,找出在 C++ 中射爆所有气球所需的最小箭数。

输出

Find Minimum Number of Arrows Needed To Burst All Balloons in C++