class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> ret;
if (intervals.empty())
return ret;
sort(intervals.begin(), intervals.end(), [](vector<int>& a, vector<int>& b){return a[0] < b[0];});
int i = 0;
while (i < intervals.size()) {
int beg = intervals[i][0];
int end = intervals[i][1];
++i;
while (i < intervals.size() && intervals[i][0] <= end) {
end = max(end, intervals[i][1]);
++i;
}
ret.push_back(vector<int>{beg, end});
}
return ret;
}
};
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), comp);
int ret = 0;
int pre = 0;
for(int i = 1; i < intervals.size(); ++i) {
if (intervals[i][0] < intervals[pre][1]) {
ret++;
if (intervals[i][1] < intervals[pre][1])
pre = i;
}
else
pre = i;
}
return ret;
}
private:
static bool comp(vector<int>& a, vector<int>& b) {
return a[0] < b[0];
}
};
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
sort(points.begin(), points.end(), comp);
int ret = 0;
int i = 0;
while (i < points.size()) {
int place = points[i][1];
++i;
while (i < points.size() && points[i][0] <= place) {
place = min(place, points[i][1]);
++i;
}
++ret;
}
return ret;
}
private:
static bool comp(vector<int>& a, vector<int>& b) {
if (a[0] != b[0])
return a[0] < b[0];
else
return a[1] < b[1];
}
};