vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> list = intervals;
bool changed = true;
while (changed) {
changed = false;
for (size_t i = 0; i < list.size() && !changed; i++) {
for (size_t j = i + 1; j < list.size(); j++) {
if (list[i][0] <= list[j][1] && list[j][0] <= list[i][1]) {
list[i] = {min(list[i][0], list[j][0]), max(list[i][1], list[j][1])};
list.erase(list.begin() + j);
changed = true;
break;
}
}
}
}
sort(list.begin(), list.end());
return list;
}
public int[][] merge(int[][] intervals) {
List<int[]> list = new ArrayList<>();
for (int[] x : intervals) list.add(new int[]{x[0], x[1]});
boolean changed = true;
while (changed) {
changed = false;
for (int i = 0; i < list.size() && !changed; i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i)[0] <= list.get(j)[1] && list.get(j)[0] <= list.get(i)[1]) {
list.set(i, new int[]{Math.min(list.get(i)[0], list.get(j)[0]), Math.max(list.get(i)[1], list.get(j)[1])});
list.remove(j);
changed = true;
break;
}
}
}
}
list.sort((a, b) -> a[0] - b[0]);
return list.toArray(new int[0][]);
}
def merge(intervals):
lst = [[x[0], x[1]] for x in intervals]
changed = True
while changed:
changed = False
i = 0
while i < len(lst) and not changed:
for j in range(i + 1, len(lst)):
if lst[i][0] <= lst[j][1] and lst[j][0] <= lst[i][1]:
lst[i] = [min(lst[i][0], lst[j][0]), max(lst[i][1], lst[j][1])]
del lst[j]
changed = True
break
i += 1
lst.sort(key=lambda p: p[0])
return lst
function merge(intervals: number[][]): number[][] {
const list = intervals.map((x) => [x[0], x[1]]);
let changed = true;
while (changed) {
changed = false;
for (let i = 0; i < list.length && !changed; i++) {
for (let j = i + 1; j < list.length; j++) {
if (list[i][0] <= list[j][1] && list[j][0] <= list[i][1]) {
list[i] = [Math.min(list[i][0], list[j][0]), Math.max(list[i][1], list[j][1])];
list.splice(j, 1);
changed = true;
break;
}
}
}
}
return list.sort((a, b) => a[0] - b[0]);
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> sorted = intervals; sort(sorted.begin(), sorted.end());
vector<vector<int>> result;
for (auto& iv : sorted) {
int start = iv[0], end = iv[1];
vector<int>* last = result.empty() ? nullptr : &result.back();
if (last != nullptr && start <= (*last)[1]) (*last)[1] = max((*last)[1], end);
else result.push_back({start, end});
}
return result;
}
public int[][] merge(int[][] intervals) {
int[][] sorted = intervals.clone();
Arrays.sort(sorted, (a, b) -> a[0] - b[0]);
List<int[]> result = new ArrayList<>();
for (int[] iv : sorted) {
int start = iv[0], end = iv[1];
int[] last = result.isEmpty() ? null : result.get(result.size() - 1);
if (last != null && start <= last[1]) last[1] = Math.max(last[1], end);
else result.add(new int[]{start, end});
}
return result.toArray(new int[0][]);
}
def merge(intervals):
sorted_iv = sorted(([x[0], x[1]] for x in intervals), key=lambda p: p[0])
result = []
for start, end in sorted_iv:
last = result[-1] if result else None
if last is not None and start <= last[1]: last[1] = max(last[1], end)
else: result.append([start, end])
return result
function merge(intervals: number[][]): number[][] {
const sorted = intervals.map((x) => [x[0], x[1]]).sort((a, b) => a[0] - b[0]);
const result: number[][] = [];
for (const [start, end] of sorted) {
const last = result[result.length - 1];
if (last !== undefined && start <= last[1]) last[1] = Math.max(last[1], end);
else result.push([start, end]);
}
return result;
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> a = intervals; sort(a.begin(), a.end());
int w = 0;
for (int i = 1; i < (int)a.size(); i++) {
if (a[i][0] <= a[w][1]) a[w][1] = max(a[w][1], a[i][1]);
else a[++w] = a[i];
}
a.resize(w + 1);
return a;
}
public int[][] merge(int[][] intervals) {
int[][] a = new int[intervals.length][];
for (int i = 0; i < a.length; i++) a[i] = intervals[i].clone();
Arrays.sort(a, (x, y) -> x[0] - y[0]);
int w = 0;
for (int i = 1; i < a.length; i++) {
if (a[i][0] <= a[w][1]) a[w][1] = Math.max(a[w][1], a[i][1]);
else a[++w] = a[i];
}
int[][] result = Arrays.copyOf(a, w + 1);
return result;
}
def merge(intervals):
a = sorted(([x[0], x[1]] for x in intervals), key=lambda p: p[0])
w = 0
for i in range(1, len(a)):
if a[i][0] <= a[w][1]: a[w][1] = max(a[w][1], a[i][1])
else:
w += 1
a[w] = a[i]
del a[w + 1:]
return a
function merge(intervals: number[][]): number[][] {
const a = intervals.map((x) => [x[0], x[1]]).sort((x, y) => x[0] - y[0]);
let w = 0;
for (let i = 1; i < a.length; i++) {
if (a[i][0] <= a[w][1]) a[w][1] = Math.max(a[w][1], a[i][1]);
else a[++w] = a[i];
}
a.length = w + 1;
return a;
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<array<int, 2>> events;
for (auto& iv : intervals) { events.push_back({iv[0], 0}); events.push_back({iv[1], 1}); }
sort(events.begin(), events.end());
vector<vector<int>> result;
int open = 0, start = 0;
for (auto& ev : events) {
int t = ev[0], kind = ev[1];
if (kind == 0) {
if (open == 0) start = t;
open++;
} else {
open--;
if (open == 0) result.push_back({start, t});
}
}
return result;
}
public int[][] merge(int[][] intervals) {
List<int[]> events = new ArrayList<>();
for (int[] iv : intervals) { events.add(new int[]{iv[0], 0}); events.add(new int[]{iv[1], 1}); }
events.sort((a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]);
List<int[]> result = new ArrayList<>();
int open = 0, start = 0;
for (int[] ev : events) {
int t = ev[0], kind = ev[1];
if (kind == 0) {
if (open == 0) start = t;
open++;
} else {
open--;
if (open == 0) result.add(new int[]{start, t});
}
}
return result.toArray(new int[0][]);
}
def merge(intervals):
events = []
for s, e in intervals: events += [(s, 0), (e, 1)]
events.sort()
result = []
open_, start = 0, 0
for t, kind in events:
if kind == 0:
if open_ == 0: start = t
open_ += 1
else:
open_ -= 1
if open_ == 0: result.append([start, t])
return result
function merge(intervals: number[][]): number[][] {
const events: number[][] = [];
for (const [s, e] of intervals) events.push([s, 0], [e, 1]);
events.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
const result: number[][] = [];
let open = 0, start = 0;
for (const [t, kind] of events) {
if (kind === 0) {
if (open === 0) start = t;
open++;
} else {
open--;
if (open === 0) result.push([start, t]);
}
}
return result;
}