解法类似的两道题目:
435. 无重叠区间
class Solution {
public:
static bool cmp(vector<int> a, vector<int> b){
return a[1] < b[1];
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
if(intervals.empty())
return 0;
sort(intervals.begin(), intervals.end(), cmp); // 根据终点 小-大排序
int count = 1; // 至少一个不相交
int x_end = intervals[0][1];
for(int i = 1; i < intervals.size(); i++){
int start = intervals[i][0];
if(start >= x_end){ // 开始比结束小,新增区间
count++;
x_end = intervals[i][1];
}
}
return intervals.size() - count;
}
};
452. 用最少数量的箭引爆气球
class Solution {
public:
static bool cmp(vector<int> a, vector<int> b){
return a[1] < b[1];
}
int findMinArrowShots(vector<vector<int>>& points) {
if(points.empty())
return 0;
sort(points.begin(), points.end(), cmp);
int count = 1;
int x_end = points[0][1];
int size = points.size();
for(int i = 1; i < size; i++){
int start = points[i][0];
if(start > x_end){ // 这里不一样
count++;
x_end = points[i][1];
}
}
return count;
}
};