type Range = [number, number];
function mergeRanges(ranges: Range[]): Range[] {
// Sort by start value
ranges.sort((a, b) => a[0] - b[0]);
const merged: Range[] = [];
for (const [start, end] of ranges) {
if (merged.length === 0 || start > merged[merged.length - 1][1]) {
merged.push([start, end]);
} else {
const last = merged.length - 1;
merged[last][1] = Math.max(merged[last][1], end);
}
}
return merged;
}
const ranges: Range[] = [
[302, 447],
[488, 489],
[121, 234],
[200, 421],
[140, 354]
];
console.log(mergeRanges(ranges));
/*
run:
[ [ 121, 447 ], [ 488, 489 ] ]
*/