Merge Intervals overlapping with Merge Sort
by rishul matta
JavaScript
var merge = function(intervals) {
var sortedIntervals = MergeSort(intervals);
var result = [];
var previousInterval = null;
sortedIntervals.forEach((interval) => {
if (!previousInterval) {
previousInterval = interval;
result.push(interval);
return;
} else {
previousInterval = result.slice(-1)[0];
}
if (previousInterval[1] > interval[0]) {
if (interval[1] > previousInterval[1]) {
previousInterval[1] = interval[1];
}
result.pop();
result.push(previousInterval);
} else {
result.push(interval);
}
});
return result;
};
var MergeSort = (function() {
function sort(arr) {
var left, right, length, low, mid, high;
if (arr.length == 1) {
return arr;
}
high = arr.length;
mid = Math.floor(high/2);
low = 0
left = arr.slice(low, mid);
right = arr.slice(mid, high);
return mergeArr(sort(left), sort(right));
}
function mergeArr(left, right) {
var result = [];
debugger;
while(left.length || right.length) {
if (left.length && right.length) {
right[0][0] > left[0][0] ? result.push(left.shift()): result.push(right.shift())
} else
if (left.length) {
result = result.concat(left);
left = [];
} else {
result = result.concat(right);
right = [];
}
}
return result;
}
return sort;
})()
merge([[1,3],[2,6],[8,10],[15,18]])
// output: [1,6],[8,10],[15,18]