js_algorithm
js_algorithm copied to clipboard
合并区间
合并区间:https://leetcode-cn.com/problems/merge-intervals/
思路分析
先来思考两个问题:
- 什么情况下可以合并?
- 怎么合并?
首先回答第一个问题:当上一个数组的右包围
,大于下一个数组的左包围
时,就可以合并。即 intervals[i][1] >= intervals[i+1][0]
。(这个的前提是数组已排过序)
接着回答第二个问题:合并时将 intervals[i][0]
与 Math.max(intervals[i][1], intervals[i + 1][1])
,分别作为合并后数组的左、右包围,组成一个数组。
代码实现
/**
* @param {number[][]} intervals
* @return {number[][]}
*/
var merge = function(intervals) {
let i = 0;
let len = intervals.length;
if(len === 0) return []
let res = []
intervals.sort((a, b) =>
a[0] - b[0]
)
// res.push(intervals[0])
while (i < len) {
let curLeft = intervals[i][0]
let curRight = intervals[i][1]
while (i < len - 1 && curRight >= intervals[i+1][0]) {
i++;
curRight = Math.max(curRight, intervals[i][1])
}
res.push([curLeft, curRight])
i++
}
return res
};