资讯详情

【LeetCode】56. 合并区间 (JavaScript)

原题

区间为 intervals[i] = [starti, endi] 。请合并所有重叠区间并返回 一个不重叠的区间数组需要覆盖输入中的所有区间

输入:intervals = [1,3],[2,6],[8,10],[15,18] 输出:[1,6],[8,10],[15,18] 解释:区间 [1,3] 和 [2,6] 重叠, 合并为 [1,6]. 

输入:intervals = [1,4],[4,5] 输出:[1,5]] 解释:区间 [1,4] 和 [4,5] 可视为重叠区间。 

题解

  • 排序
/** * @param {number[][]} intervals * @return {number[][]} */ var merge = function(intervals) { 
             let res = []     for (let i = 0; i < intervals.length; i ) { 
         // 冒泡排序         let len = intervals.length - i - 1;         for (let j = 0; j < len; j ) { 
                     // 比较区间的后一个,从小到大排列             if (intervals[j   1][1] < intervals[j][1]) { 
                         let tmp = intervals[j 1];                 intervals[j 1] = intervals[j];                 intervals[j] = tmp;             }         }         // 比较每次冒泡的区间         if(res[0] && res[res.length-1][0] <= intervals[len][1]) { 
           // 如果区间重叠,合并区间 res[res.length-1][0] = Math.min(res[res.length-1][0], intervals[len][0]); } else { 
           // 区间不重叠 res.push(intervals[len]) } } return res; }; 
  • 优化
/** * @param {number[][]} intervals * @return {number[][]} */
var merge = function(intervals) { 
        
    let res = []; // 结果
    let strat = [];
    let end = [];
    // 分别记录区间的开始和结束
    for(let i = 0; i < intervals.length; i++) { 
        
        strat.push(intervals[i][0]);
        end.push(intervals[i][1]);
    }
    // 排序
    strat.sort((a, b) => a - b);
    end.sort((a, b) => a - b);
    // 合并区间,i为区间的结束,j为区间的开始
    for(let i = 0, j = 0; i < intervals.length; i++) { 
        
        // 找到合并的边界,记录不可再合并的区间
        if(i == intervals.length - 1 || strat[i+1] > end[i]) { 
        
            res.push([strat[j], end[i]]);
            j = i + 1;
        }
    }
    return res;
};

标签: xsm吸收薄膜电容器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台