Merge all overlapping intervals and return the non-overlapping intervals that cover every input interval.
After sorting by start, overlapping intervals are adjacent. Extend the last merged interval while the next one starts inside it.
1function merge(intervals: number[][]): number[][] {2intervals.sort((a, b) => a[0] - b[0]);3const res = [intervals[0]];4for (const [s, e] of intervals.slice(1)) {5const last = res[res.length - 1];6if (s <= last[1]) last[1] = Math.max(last[1], e);7else res.push([s, e]);8}9return res;10}
Sort by start.
Space: play/pause · ←/→: step