NC37 合并区间

138 阅读1分钟

image.png

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param intervals Interval类一维数组
 * @return Interval类一维数组
 */
function merge(intervals) {
    // intervals = [
    //     { start: 10, end: 30 },
    //     { start: 20, end: 60 },
    //     { start: 80, end: 100 },
    //     { start: 150, end: 180 },
    // ];

    // 按区间的左端点从小到大排序
    intervals.sort((a, b) => a.start - b.start);
    // 准备目标数组
    const target = [];
    // 当intervals数组不为空时,将首元素加入目标数组
    if (intervals[0]) target.push(intervals[0]);
    // 从索引1开始遍历intervals数组,与target数组中的最后一个元素(区间)做对比
    for (let i = 1; i < intervals.length; i++) {
        // target数组最后一个元素的右端点大于intervals[i]的右端点,表示intervals[i]位于当前区间内,不执行操作
        if (target[target.length - 1].end >= intervals[i].end) continue;
        // target数组最后一个元素的右端点大于intervals[i]的左端点,表示两个区间有交集,更新当前元素右端点
        else if (target[target.length - 1].end >= intervals[i].start)
            target[target.length - 1].end = intervals[i].end;
        // 除以上情况外,表示两个区间无交集,将intervals[i]加入target数组*
        else target.push(intervals[i]);
    }
    return target;
}
module.exports = {
    merge: merge,
};

合并区间_牛客题霸_牛客网 (nowcoder.com)