intermediate
Review: the merge that loses coverage
This is recall. The code looks finished and is wrong. Find the defect and fix it. You are graded on tests you cannot see.
Coverage windows from the monitoring stack arrive overlapping and you merge them with a helper before plotting. The helper is a textbook sort-then-sweep. Its tests pass. The plots are wrong.
/**
* Collapses [start, end] pairs into the disjoint coverage, sorted by start.
* Touching intervals merge; the input is not mutated.
*/
export function mergeIntervals(intervals: Array<[number, number]>): Array<[number, number]> {
if (intervals.length === 0) return []
const sorted = [...intervals].sort((a, b) => a[0] - b[0] || a[1] - b[1])
const merged: Array<[number, number]> = []
let [start, end] = sorted[0] as [number, number]
for (const [nextStart, nextEnd] of sorted.slice(1)) {
if (nextStart <= end) {
end = nextEnd
} else {
merged.push([start, end])
start = nextStart
end = nextEnd
}
}
merged.push([start, end])
return merged
}review — find the defectCtrl+↵ submits · Ctrl+Shift+↵ runsstarter code