1. 题目来源
2. 题目说明
3. 题目解析
方法一:区间问题+排序+贪心
读了半天题…
将气球投影到 ·x
轴,作为一个区间。本题就是给定 x
轴上这些区间,用最少的点将所有区间覆盖。求最少用点的个数。区间选点问题。
贪心模型为:[区间问题] 区间选点(区间问题+贪心)。
思路:
- 按照区间右端点进行排序
- 记第一个区间的右端点为
r
,顺序遍历每个区间,若r
小于当前遍历区间左端点。将需要新的点,将r
更新为当前这个区间的右端点即可
至于贪心思路证明,参考上面链接博文即可。
代码:
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
if (points.empty()) return 0;
sort(points.begin(), points.end(), [](vector<int> a, vector<int> b) {
return a[1] < b[1];
});
int res = 1, r = points[0][1];
for (int i = 1; i < points.size(); ++i) // 从第二个区间开始枚举
if (points[i][0] > r) {
res ++;
r = points[i][1];
}
return res;
}
};