c++
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> arr;
vector<int> temp(2);
for (auto x : intervals) {
temp[0] = x[0];
temp[1] = 1;
arr.push_back(temp);
temp[0] = x[1];
temp[1] = -1;
arr.push_back(temp);
}
sort(arr.begin(), arr.end(),
[](const vector<int> &a, const vector<int> &b) -> bool {
if (a[0] - b[0]) return a[0] < b[0];
return a[1] > b[1];
});
int pre = -1, sum = 0;
vector<vector<int>> ans;
for (int i = 0; i < arr.size(); i++) {
if (pre == -1) pre = arr[i][0];
sum += arr[i][1];
if (sum == 0) {
temp[0] = pre;
temp[1] = arr[i][0];
ans.push_back(temp);
pre = -1;
}
}
return ans;
}
};
js
var merge = function(intervals) {
var arr = new Array(intervals.length * 2).fill(0).map(()=> new Array(2).fill(0)), temp = new Array(2).fill(0);
var k = 0;
for (var x of intervals) {
arr[k][0] = x[0];
arr[k++][1] = 1;
arr[k][0] = x[1];
arr[k++][1] = -1;
}
arr.sort(function(a, b) {
if (a[0] - b[0]) {
return a[0] - b[0];
}
return b[1] - a[1];
});
var pre = -1, sum = 0, ans = new Array(intervals.length * 2).fill(0).map(()=>new Array(2).fill(0));
var cnt = 0;
for (var i = 0; i < arr.length; i++) {
if (pre == -1) pre = arr[i][0];
sum += arr[i][1];
if (sum == 0) {
ans[cnt][0] = pre;
ans[cnt][1] = arr[i][0];
cnt++;
pre = -1;
}
}
return ans.slice(0, cnt);
};