Here is a better intersection check, because the javascript solution only looks at full overlap not semi overlaps:
const merge = function(intervals_a, intervals_b) {
const merged = [];
let pointerA = 0;
let pointerB = 0;
let startA = intervals_a[pointerA].start;
let endA = intervals_a[pointerA].end;
let startB = intervals_b[pointerB].start;
let endB = intervals_b[pointerB].end;
let intersectionStart = -1;
let intersectionEnd = -1
while(pointerA < intervals_a.length && pointerB < intervals_b.length) {
startA = intervals_a[pointerA].start;
endA = intervals_a[pointerA].end;
startB = intervals_b[pointerB].start;
endB = intervals_b[pointerB].end;
//find an intersection
if ((startB <= startA && endB >= startA) || (startB <= endA && endB >= endA)) { //intersection
intersectionStart = Math.max(startA, startB);
intersectionEnd = Math.min(endA, endB);
merged.push(new Interval(intersectionStart, intersectionEnd));
}
if (endA === endB) { //if the two ends are equal, move both pointers
pointerA++;
pointerB++;
} else if (endA < endB) { //move the pointer of the interval which ends first , A here
pointerA++;
} else if (endA > endB) { //move the pointer of the interval which ends first , B here
pointerB++;
}
}
return merged;
}
what do you guys think ?