文章目录
Leetcode452
1.问题描述
2.解决方案–>说白了就是求这些气球对应区间的交集的个数就是箭的个数
解法一:
想用哈希,比如说有一个区间(1,6),那就把nums(1,6)标记成1,然鹅发现实现不了因为没那么大数组
//思路一:哈希将各个区间给求交集进而判断最后剩几个区间,但是由于xstart,xend太大了,得开2*2^31大的数组
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
vector<bool> n(INT_MAX, false);
}
};
解法二:
整体思路:
思路大概是【(x,y)代表起点和终点】【代码中的注释已经很清晰了其实】
1.先排序按照先x后y,然后遍历气球
2.设置一个temp用来保存目前正在和遍历结果做比较的这么一个(x,y),初始化为第一个气球
3.如果有重叠的那就求子集并更新temp
4.如果当前遍历气球和temp没有重叠那么说明temp这个区间已经不可能和任何后面的气球重叠了,那就加入结果集中
5.最后输出结果别忘了是结果集数量加1,因为最后还剩一个temp没加入
代码实现思路:
1.考虑x==1,x相同那么直接跳过,因为排序的时候x相同y肯定大
2.考虑x(1,6] —>更新temp
----2.1 考虑y<=6
----2.2 考虑y>6
3.考虑x>6 {1,6} {7,y} ---->把temp加入结果集,更新temp
//思路二:排序进而求交集区间端点
class Solution1 {
public:
//static bool cmp(vector<int> a,vector<int> b){
static bool cmp(vector<int>& a,vector<int>& b){
if(a[0]==b[0]) return a[1]<b[1];
return a[0]<b[0];<