class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.empty()) return {};
sort(intervals.begin(), intervals.end());
//sort(intervals.begin(), intervals.end(), [](Interval a, Interval b){return a.start < b.start;});
vector<vector<int>> res{intervals[0]};
for (int i = 1; i < intervals.size(); ++i) {
if (res.back()[1] < intervals[i][0]) {
res.push_back(intervals[i]);
} else {
res.back()[1] = max(res.back()[1], intervals[i][1]);
}
}
return res;
}
};
原链接:
https://github.com/grandyang/leetcode/issues/56
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int n = intervals.size();
vector<vector<int>> res;
vector<int> starts, ends;
for (int i = 0; i < n; ++i) {
starts.push_back(intervals[i][0]);
ends.push_back(intervals[i][1]);
}
sort(starts.begin(), starts.end());
sort(ends.begin(), ends.end());
for (int i = 0, j = 0; i < n; ++i) {
if (i == n - 1 || starts[i + 1] > ends[i]) {
res.push_back({starts[j], ends[i]});
j = i + 1;
}
}
return res;
}
};
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
for (int i = 0; i < intervals.size(); ++i) {
res = insert(res, intervals[i]);
}
return res;
}
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int> newInterval) {
vector<vector<int>> res;
int n = intervals.size(), cur = 0;
for (int i = 0; i < n; ++i) {
if (intervals[i][1] < newInterval[0]) {
res.push_back(intervals[i]);
++cur;
} else if (intervals[i][0] > newInterval[1]) {
res.push_back(intervals[i]);
} else {
newInterval[0] = min(newInterval[0], intervals[i][0]);
newInterval[1] = max(newInterval[1], intervals[i][1]);
}
}
res.insert(res.begin() + cur, newInterval);
return res;
}
};