码迷,mamicode.com
首页 > 编程语言 > 详细

js算法题---合并区间

时间:2020-06-03 14:00:38      阅读:129      评论:0      收藏:0      [点我收藏+]

标签: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<arr.length;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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!