当前位置: 首页 > news >正文

LeetCode 56. Merge Intervals 题解

LeetCode 56. Merge Intervals 题解

题目描述

以数组intervals表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

示例 1:

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

示例 2:

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

解题思路

方法:排序

思路

  • 首先按照每个区间的起始位置进行排序
  • 初始化一个结果数组,将第一个区间加入结果数组
  • 遍历剩余的区间:
    • 获取结果数组中最后一个区间的结束位置
    • 如果当前区间的起始位置小于等于最后一个区间的结束位置,说明两个区间重叠,需要合并
    • 更新最后一个区间的结束位置为两个区间结束位置的最大值
    • 否则,将当前区间加入结果数组

复杂度分析

  • 时间复杂度:O(n log n),其中 n 是区间的数量。排序的时间复杂度是 O(n log n),遍历的时间复杂度是 O(n)。
  • 空间复杂度:O(n),其中 n 是区间的数量。需要一个数组来存储结果。

代码实现

方法:排序

class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: if not intervals: return [] # 按照区间的起始位置排序 intervals.sort(key=lambda x: x[0]) result = [intervals[0]] for i in range(1, len(intervals)): current_interval = intervals[i] last_interval = result[-1] # 如果当前区间的起始位置小于等于最后一个区间的结束位置,说明两个区间重叠 if current_interval[0] <= last_interval[1]: # 更新最后一个区间的结束位置为两个区间结束位置的最大值 last_interval[1] = max(last_interval[1], current_interval[1]) else: # 否则,将当前区间加入结果数组 result.append(current_interval) return result

测试用例

测试用例 1:

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

测试用例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]

测试用例 3:

输入:intervals = [[1,4],[0,4]]
输出:[[0,4]]

测试用例 4:

输入:intervals = [[1,4],[2,3]]
输出:[[1,4]]

总结

本题是区间合并的经典问题,主要考察对区间排序和遍历的理解。通过先排序,然后遍历合并重叠的区间,我们可以有效地解决这个问题。

排序的核心思想是将区间按照起始位置排序,这样在遍历过程中,我们只需要比较当前区间和结果数组中最后一个区间的结束位置,就可以判断是否需要合并。

这种方法不仅适用于区间合并问题,还可以应用于许多其他需要处理区间的问题,例如区间交集、区间覆盖等。掌握区间处理的技巧,对于解决这类问题非常重要。

http://www.cnnetsun.cn/news/1601721.html

相关文章:

  • 3步构建零负担工作区:NoFences让桌面管理效率提升200%
  • 利用claudecode与快马平台,十分钟快速原型化你的下一个Web应用想法
  • 终极指南:如何让老旧Mac免费升级到最新macOS系统
  • 3步打造专业级音乐元数据管理系统的终极方案
  • 从像素还原到特征重建:深度解析上采样的四大核心技术
  • 算法模拟类题目解析
  • 轻量级桌面应用开发的革新:Tauri框架突破性能与体积瓶颈
  • CTF逆向实战:从RC4到Base64,手把手拆解CTFshow赛题
  • UDOP-large算力优化:FP16推理+FlashAttention加速UDOP-large响应速度
  • 重构语音交互范式:AnythingLLM本地Whisper技术方案深度解析
  • VS与VSCode本质区别解析——visual studio VS vscode
  • 突破B站音频壁垒:BilibiliDown无损音频提取的技术实现与场景化应用
  • 关于 COALESCE 函数的解析与应用
  • 65R099 -ASEMI超结MOS管TOLL封装
  • 7个提升Web沉浸体验的开源全景引擎技术解析
  • BEYOND REALITY Z-Image避坑指南:解决生成图片模糊、全黑的常见问题
  • 2026年汉中全案装修公司,究竟藏着哪些让家焕然一新的秘诀?
  • 月之暗面:大模型创业逆境突围?
  • 5步完成Hunyuan3D-2版本迁移:从1.x到2.0完整指南
  • 《Windows Internals》10.1.6 HKEY_USERS:为什么它才是真正的“已加载用户配置大本营”?
  • Galaxy UI组件库深度解析:3000+开源UI元素的完整实践手册
  • 企业级流程引擎与可视化表单深度集成:3步实现业务流程数字化
  • Libre Barcode开源字体:终极免费条码生成解决方案
  • 突破系统定制瓶颈:OpCore Simplify重构开源硬件适配技术路径
  • 动态透视报表 + 查询接口 + Excel导出
  • FireRed-OCR Studio应用场景:高校教务材料批量数字化处理方案
  • 探秘书匠策AI:毕业论文创作的“全能助手”大揭秘
  • 微信小程序如何找“人工客服”
  • nanobot实战:超轻量AI助手在QQ聊天场景中的7大应用
  • Wan2.2-I2V-A14B开发环境搭建:VSCode远程连接与调试教程