educative.io

Educative

Better intersection check

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 ?

Hi @laurent
Thanks for your suggestion but for the time being, this course won’t be updated.