class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
int n = intervals.size();
if (!n) return res;
sort(intervals.begin(), intervals.end(), [](vector<int>& lhs, vector<int>& rhs) { return lhs[0] < rhs[0]; });
res.push_back(intervals[0]);
for (int i = 1; i < n; i++) {
auto backVec = res.back();
if (intervals[i][0] > backVec[1]) {
res.push_back(intervals[i]);
} else {
res.back()[1] = max(res.back()[1], intervals[i][1]);
}
}
return res;
}
};