452.用最少数量的箭引爆气球
Posted 我要出家当道士
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了452.用最少数量的箭引爆气球相关的知识,希望对你有一定的参考价值。
目录
1、Question
2、Analysis
射箭肯定射击气球重叠最多的地方最优,那么反过来就是求存在多少完全不重叠的区域。重叠的区域一支箭就可以了,这题的答案就是独立的重叠的区域数量。
先将气球的区间按右边界正序排序,以右边界作为重叠区域的边界。那么只存在以下三种情况,首先第一种情况不会出现,所有不作考虑;第二种情况,有与当前区域重叠,可以复用一支箭,所以也不作考虑;需要考虑第三种情况,此时该区间超出重叠区域,说明出现了新的区域,此时需要新的箭进行新区域的射击。
3、Code
class Solution
public:
bool static compare(vector<int> &a, vector<int> &b)
return a[1] < b[1];
int findMinArrowShots(vector<vector<int>> &points)
int size = points.size();
// 按右边界排序
sort(points.begin(), points.end(), compare);
// 首先确定第一个重叠区域
int flag = points[0][1];
int nums = 1;
for (int i = 1; i < size; i++)
// 出现新的重叠区域,需要新的箭支,并更新新的区域的右边界。
if (points[i][0] > flag)
flag = points[i][1];
nums++;
return nums;
;
以上是关于452.用最少数量的箭引爆气球的主要内容,如果未能解决你的问题,请参考以下文章