https://leetcode-cn.com/problems/merge-intervals/
点击查看【bilibili】
题目
示例
输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
解答

1将数组中的区间按照起始位置排序
2.用curr数组记录当前合并的最大区间,遍历数组中的每一个区间,
如果当前区间的起始位置小于等于curr的终点位置,则可以继续合并,
所以合并 并更新curr的起始和终止位置。
如果当前区间的起始位置大于curr的终止位置,则无法合并。
所以将curr加入到result里,并用当前的区间替换curr的值
答案
/*** @param {number[][]} intervals* @return {number[][]}*/var merge = function(intervals) {if(intervals.length < 2 ) {return intervals}// 数组进行排序,如果第一个值相同,比较第二个值intervals.sort(function(a,b){return a[0] != b[0] ? a[0] - b[0] : a[1] - b[1];})let curr = intervals[0] // 建立变量,初始化数组第一个let result = []// 循环数组进行比较for(let interval of intervals) {// 如果curr末位 大于等于 当前项的首位,那么合并两个项,取最大值作为末位if(curr[1] >= interval[0]) {curr[1] = Math.max(curr[1], interval[1])// 否则没有重合区间,将curr值添加到结果,curr指向当前项}else {result.push(curr)curr = interval}}// 如果循环完curr还有值,也就是没有走push阶段,进行合并了,// 但是没有加到结果里,加入到结果if(curr.length!==0) {result.push(curr)}return result};
