返回

LeetCode 56:合并区间 | 算法练习系列

前端

算法练习系列:LeetCode 56 - 合并区间

前言

欢迎来到算法练习系列!今天,我们将学习如何使用 JavaScript 合并相交区间。这是一个常见且实用的算法问题,可以帮助我们在处理数组格式的数据时更轻松地进行合并操作。

题目

LeetCode 56 的题目如下:

给定一个包含非重叠区间的集合,合并所有相交区间并返回一个不重叠的区间集合。

例如:

输入:[[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]

解题思路

为了解决这个问题,我们可以使用以下步骤:

  1. 将区间按照起始位置排序。
  2. 遍历排序后的区间列表。
  3. 将当前区间与前一个区间进行比较,如果相交则合并两个区间,否则将当前区间添加到结果列表中。
  4. 返回结果列表。

实现过程

以下是如何使用 JavaScript 实现上述解题思路:

/**
 * 合并相交区间
 *
 * @param {number[][]} intervals 区间列表
 * @return {number[][]} 合并后的区间列表
 */
const merge = function (intervals) {
  // 1. 将区间按照起始位置排序
  intervals.sort((a, b) => a[0] - b[0]);

  // 2. 遍历排序后的区间列表
  const result = [];
  let prev = intervals[0];
  for (let i = 1; i < intervals.length; i++) {
    const current = intervals[i];

    // 3. 将当前区间与前一个区间进行比较,如果相交则合并两个区间,否则将当前区间添加到结果列表中
    if (current[0] <= prev[1]) {
      prev[1] = Math.max(prev[1], current[1]);
    } else {
      result.push(prev);
      prev = current;
    }
  }

  // 4. 返回结果列表
  result.push(prev);
  return result;
};

时间复杂度

该算法的时间复杂度为 O(n log n),其中 n 是区间列表的长度。排序操作的时间复杂度为 O(n log n),合并操作的时间复杂度为 O(n)。

结语

通过本文,您已经学习了如何使用 JavaScript 合并相交区间。希望您能够将这些知识应用到实际项目中,不断提升自己的编程能力和算法思维。如果您有任何疑问或建议,欢迎在下方评论区留言。