將一組區間中所有重疊的區間進行合並,例如 [起點,終點] 這種方式
輸入:[[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))