Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
Example 1:
Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].
Example 2:
Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
Pseudocode
- sort array in ascending min val
- for loop to merge
- what are conditions to merge?
- push non merge/overlaps to result
Solution
functionmerge(intervals) {if (!intervals.length) {return intervals; }// if start interval isn't the same, sort using the start interval, otherwise sort using end intervalintervals.sort((a, b) => (a[0] !== b[0] ? a[0] - b[0] : a[1] - b[1]));// console.log(intervals)var prev = intervals[0];var res = [prev];for (var curr of intervals) {// if start of current interval is smaller than previous endif (curr[0] <= prev[1]) {// merge to the largest end interval either previous or current prev[1] =Math.max(prev[1], curr[1]);// else push and reassign prev and curr } else {res.push(curr); prev = curr; } }return res;}