合并区间问题

149 阅读1分钟

leetcode-57 插入区间

题目描述

给你一个 无重叠的 按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

解题思路

解题思路参考leetcode

运行效率

4IH9GMIK1F00SQ@$YH_GX1W.png

代码如下

function insert(intervals: number[][], newInterval: number[]): number[][] {
  const merge = [];
  let index = 0;
  for (; index < intervals.length; index++) {
    const element = intervals[index];
    if (newInterval[1] < element[0]) {
      break;
    } else if (newInterval[0] > element[1]) {
      continue;
    } else {
      merge.push(index);
    }
  }
  if (merge.length) {
    shouldMerge();
  } else if (index === intervals.length) {
    intervals.push(newInterval);
  } else {
    index === 0
      ? intervals.unshift(newInterval)
      : intervals.splice(index, 0, newInterval);
  }

  return intervals;

  function shouldMerge() {
    intervals.splice(merge[0], merge.length, [
      newInterval[0] > intervals[merge[0]][0]
        ? intervals[merge[0]][0]
        : newInterval[0],
      newInterval[1] > intervals[merge[merge.length - 1]][1]
        ? newInterval[1]
        : intervals[merge[merge.length - 1]][1],
    ]);
  }
}