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]