js算法題---合並區間


將一組區間中所有重疊的區間進行合並,例如 [起點,終點] 這種方式

輸入:[[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))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM