function mergeIntervals(intervals) {
intervals.sort((a, b) => a[0] - b[0]);
const merged = [];
for (const interval of intervals) {
if (!merged.length || merged[merged.length - 1][1] < interval[0]) {
merged.push(interval);
} else {
merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
}
}
return merged;
}
const intervals = [[1,3],[2,6],[8,10],[15,18]];
console.log(mergeIntervals(intervals));The code sorts intervals by start time. Then it merges intervals that overlap by updating the end time of the last merged interval.
Here, [1,3] and [2,6] overlap, so they merge into [1,6]. The others remain separate.
function mergeIntervals(intervals) {
intervals.sort((a, b) => a[0] - b[0]);
const merged = [];
for (const interval of intervals) {
if (!merged.length || merged[merged.length - 1][1] < interval[0]) {
merged.push(interval);
} else {
merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
}
}
return merged;
}
const intervals = [[1,4],[4,5],[5,6],[7,8]];
console.log(mergeIntervals(intervals));Intervals [1,4], [4,5], and [5,6] all touch or overlap, so they merge into [1,6]. The last interval stays separate.
function mergeIntervals(intervals) {
intervals.sort((a, b) => a[0] - b[0]);
const merged = [];
for (const interval of intervals) {
if (!merged.length || merged[merged.length - 1][1] < interval[0]) {
merged.push(interval);
} else {
merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
}
}
return merged;
}
const intervals = [[1,3],[3,6],[8,10],[15,18]];
console.log(mergeIntervals(intervals));The condition uses <= which causes intervals that just touch to not merge correctly, leading to incorrect output but no runtime error.
Sorting the intervals takes O(n log n). Merging them in one pass takes O(n). Overall complexity is O(n log n).
function mergeIntervalsWithLabels(intervals) {
intervals.sort((a, b) => a[0] - b[0]);
const merged = [];
for (const interval of intervals) {
if (!merged.length || merged[merged.length - 1][1] < interval[0]) {
merged.push([interval[0], interval[1], [interval[2]]]);
} else {
merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
merged[merged.length - 1][2].push(interval[2]);
}
}
return merged;
}
const intervals = [[1,3,'a'],[2,6,'b'],[8,10,'c'],[15,18,'d']];
console.log(mergeIntervalsWithLabels(intervals));The code merges overlapping intervals and collects their labels in an array. Intervals [1,3,'a'] and [2,6,'b'] merge with labels combined.
