js算法题---合并区间

2020-12-26 10:27

阅读:486

标签:fun   start   tar   行合并   fine   div   return   输出   turn   

将一组区间中所有重叠的区间进行合并,例如 [起点,终点] 这种方式

输入:[[1,3],[2,6],[15,18],[8,10],[10,11],[7,8]]
输出:[[1,6],[15,18],[7,11]]

分析:

首先需要排序,排序之后,就可以看看有没有重叠的,如果重叠就合并。

var arr = [[1,3], [2,6],[15,18],[8,10],[10,11],[7,8]]
function merge(arr){
    //排序
    arr.sort(function(a,b){
        if(a[0] != b[0]){
            return a[0]-b[0]
        }
        return a[1] - b[1]
    })
    let ans = [], start, end;
    //排序之后,看看有没有重叠的,如果有,合并
    for(let i=0;i){
            let s = arr[i][0], e = arr[i][1];
            if(start === undefined){
                start = s, end = e;
            }else if(s  end){
                end = Math.max(e, end)
            }else{
                let part = [start, end];
                ans.push(part)
                start = s;
                end = e
            }
    }
    if(start !== undefined){
        let part = [start, end]
        ans.push(part)
    }
    
    return ans
}

console.log( merge(arr))

 

js算法题---合并区间

标签:fun   start   tar   行合并   fine   div   return   输出   turn   

原文地址:https://www.cnblogs.com/Super-scarlett/p/13036941.html


评论


亲,登录后才可以留言!