interval-list-intersections

by Augustus Yuan

HTML

<label for="intervalsA">A</label>
<input id="intervalsA" type="text" value="[[0,2],[5,10],[13,23],[24,25]]" />
<label for="intervalsB">B</label>
<input id="intervalsB" type="text" value="[[1,5],[8,12],[15,24],[25,26]]" />

JavaScript

var intervalsAInput = document.getElementById('intervalsA');
var intervalsBInput = document.getElementById('intervalsB');

var dataA = JSON.parse(intervalsAInput.value);
var dataB = JSON.parse(intervalBInput.value);



/**
 * NOTE THIS IS THE ANSWER DO NOT READ IF YOU WISH TO SOLVE ON YOUR OWN
 *
 * @param {number[][]} A
 * @param {number[][]} B
 * @return {number[][]}
 */
function intervalIntersection(A, B) {
  var aPointer = 0, bPointer = 0;
  var intersection = [];
  while (aPointer < A.length && bPointer < B.length) {
    var aPair = A[aPointer];
    var bPair = B[bPointer];
    var aStart = aPair[0], aEnd = aPair[1],
        bStart = bPair[0], bEnd = bPair[1];

    var startMax = Math.max(aStart, bStart);
    var endMin = Math.min(aEnd, bEnd);
    if (endMin >= startMax) {
      intersection.push([startMax, endMin]);
    }
    if (aEnd === endMin) { aPointer++; }
    if (bEnd === endMin) { bPointer++; }  
  }
  return intersection;
};