Cosen95 / js_algorithm

🏂js数据结构与算法 系统学习
36 stars 10 forks source link

合并区间 #55

Open Cosen95 opened 4 years ago

Cosen95 commented 4 years ago

合并区间:https://leetcode-cn.com/problems/merge-intervals/

Cosen95 commented 4 years ago

思路分析

先来思考两个问题:

首先回答第一个问题:当上一个数组的右包围,大于下一个数组的左包围时,就可以合并。即 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
};