返回
LeetCode 56:合并区间 | 算法练习系列
前端
2023-11-14 18:15:15
算法练习系列:LeetCode 56 - 合并区间
前言
欢迎来到算法练习系列!今天,我们将学习如何使用 JavaScript 合并相交区间。这是一个常见且实用的算法问题,可以帮助我们在处理数组格式的数据时更轻松地进行合并操作。
题目
LeetCode 56 的题目如下:
给定一个包含非重叠区间的集合,合并所有相交区间并返回一个不重叠的区间集合。
例如:
输入:[[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解题思路
为了解决这个问题,我们可以使用以下步骤:
- 将区间按照起始位置排序。
- 遍历排序后的区间列表。
- 将当前区间与前一个区间进行比较,如果相交则合并两个区间,否则将当前区间添加到结果列表中。
- 返回结果列表。
实现过程
以下是如何使用 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 合并相交区间。希望您能够将这些知识应用到实际项目中,不断提升自己的编程能力和算法思维。如果您有任何疑问或建议,欢迎在下方评论区留言。