news 2026/6/26 0:05:30

【每日算法】 LeetCode 56. 合并区间

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【每日算法】 LeetCode 56. 合并区间

对前端开发者而言,学习算法绝非为了“炫技”。它是你从“页面构建者”迈向“复杂系统设计者”的关键阶梯。它将你的编码能力从“实现功能”提升到“设计优雅、高效解决方案”的层面。从现在开始,每天投入一小段时间,结合前端场景去理解和练习,你将会感受到自身技术视野和问题解决能力的质的飞跃。------ 算法:资深前端开发者的进阶引擎

LeetCode 56. 合并区间

1. 题目描述

1.1 问题陈述

给定一个区间的集合intervals,其中每个区间表示为[start, end],你需要合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需覆盖输入中的所有区间。

示例 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] 可被视为重叠区间。

注意:输入类型可能为数组或类似结构,输出要求有序(通常按起始点升序)。作为前端开发者,你需处理类似数组操作和数据格式化问题。

2. 问题分析

2.1 输入输出分析

  • 输入:一个二维数组intervals,每个子数组表示一个区间,包含起始点start和结束点end。假设start <= end,且数组可能无序。
  • 输出:一个二维数组,包含合并后的不重叠区间,按起始点升序排列。
  • 重叠定义:两个区间[a, b][c, d]重叠,如果a <= dc <= b(即一个区间的起始点小于或等于另一个区间的结束点)。合并后新区间为[min(a, c), max(b, d)]

2.2 关键点

  • 前端场景中,这类问题常见于日历事件合并、时间轴渲染或数据可视化(如甘特图),其中需优化重叠元素的显示。
  • 核心挑战是高效识别和处理重叠区间,避免 O(n²) 的暴力比较,以提升性能。

3. 解题思路

3.1 思路一:排序后合并(最优解)

  • 步骤:
    1. 将区间按起始点start升序排序。
    2. 初始化结果数组merged,遍历排序后的区间:
      • 如果merged为空或当前区间与merged中最后一个区间不重叠(即当前区间的起始点大于最后一个区间的结束点),则将当前区间添加到merged
      • 否则,合并区间:更新merged最后一个区间的结束点为当前区间结束点与最后一个区间结束点的最大值。
  • 复杂度:时间复杂度 O(n log n)(主要来自排序),空间复杂度 O(log n)(排序使用的栈空间,或 O(n) 如果存储结果)。这是最优解,因为排序是必要步骤,且后续线性扫描高效。
  • 前端关联:类似前端中对事件列表按时间排序后渲染,减少重复计算。

3.2 思路二:暴力法

  • 步骤:遍历每个区间,与其他所有区间比较,合并重叠区间,重复直到无重叠。效率低,仅适用于小数据集或作为理解基础。
  • 复杂度:时间复杂度 O(n²),空间复杂度 O(n)。不推荐用于生产环境。

4. 各思路代码实现

以下用 JavaScript 实现,作为前端开发者的常用语言。

4.1 思路一:排序后合并的 JavaScript 实现

/** * @param {number[][]} intervals * @return {number[][]} */varmerge=function(intervals){if(intervals.length===0)return[];// 按起始点升序排序intervals.sort((a,b)=>a[0]-b[0]);constmerged=[];for(letintervalofintervals){// 如果 merged 为空或当前区间不重叠if(merged.length===0||merged[merged.length-1][1]<interval[0]){merged.push(interval);}else{// 合并区间:更新最后一个区间的结束点merged[merged.length-1][1]=Math.max(merged[merged.length-1][1],interval[1]);}}returnmerged;};// 测试示例console.log(merge([[1,3],[2,6],[8,10],[15,18]]));// 输出 [[1,6],[8,10],[15,18]]console.log(merge([[1,4],[4,5]]));// 输出 [[1,5]]

4.2 思路二:暴力法的 JavaScript 实现(仅作参考)

/** * 暴力法实现合并区间 * @param {number[][]} intervals * @return {number[][]} */varmergeBruteForce=function(intervals){if(intervals.length===0)return[];letmerged=[...intervals];letchanged=true;// 重复合并直到无变化while(changed){changed=false;constnewMerged=[];for(leti=0;i<merged.length;i++){letcurrent=merged[i];letisMerged=false;for(letj=0;j<newMerged.length;j++){// 检查重叠if(current[0]<=newMerged[j][1]&&newMerged[j][0]<=current[1]){// 合并区间newMerged[j][0]=Math.min(newMerged[j][0],current[0]);newMerged[j][1]=Math.max(newMerged[j][1],current[1]);isMerged=true;changed=true;break;}}if(!isMerged){newMerged.push(current);}}merged=newMerged;}returnmerged.sort((a,b)=>a[0]-b[0]);// 确保输出有序};// 注意:暴力法效率低,仅用于小数据测试console.log(mergeBruteForce([[1,3],[2,6],[8,10],[15,18]]));// 输出类似结果

5. 各实现思路的复杂度、优缺点对比表格

思路时间复杂度空间复杂度优点缺点适用场景
排序后合并O(n log n)O(log n) 或 O(n)高效,代码简洁,易于维护依赖排序,可能修改原数组大多数前端应用,如事件合并、数据可视化
暴力法O(n²)O(n)实现简单,易于理解效率低,不适用于大数据小数据集学习或原型开发

6. 总结

6.1 实际应用场景

作为前端开发者,掌握合并区间算法可应用于以下场景:

  • 日历或日程管理应用:合并重叠事件以优化显示,例如在 FullCalendar 等库中渲染时间块。
  • 数据可视化:在甘特图或时间轴中合并重叠任务,提升可读性。
  • 表单验证:处理时间范围输入,确保无冲突(如预订系统)。
  • 状态管理:在 Redux 或 Vuex 中合并重叠的状态更新区间,优化性能。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 20:09:18

Open-AutoGLM实战指南:5步搭建高精度邮件分类模型(零基础可学)

第一章&#xff1a;Open-AutoGLM邮件分类模型概述Open-AutoGLM 是一款基于开源大语言模型架构的智能邮件分类系统&#xff0c;专为高效识别和归类电子邮件内容而设计。该模型融合了自然语言理解与自动化标签生成能力&#xff0c;能够在无需人工干预的前提下&#xff0c;准确区分…

作者头像 李华
网站建设 2026/6/23 21:35:23

Open-AutoGLM邮件处理全解析,深度掌握AI驱动的智能过滤核心技术

第一章&#xff1a;Open-AutoGLM邮件分类筛选在现代企业通信中&#xff0c;邮件系统承载着大量关键信息&#xff0c;如何高效地对海量邮件进行自动化分类与筛选成为提升工作效率的重要课题。Open-AutoGLM 是一个基于开源大语言模型的智能邮件处理框架&#xff0c;能够结合自然语…

作者头像 李华
网站建设 2026/6/23 12:56:46

通达信趋势中短长

{}A:MA(-100*(HHV(HIGH,34)-CLOSE)/(HHV(HIGH,34)-LLV(LOW,34)),19); B:-100*(HHV(HIGH,14)-CLOSE)/(HHV(HIGH,14)-LLV(LOW,14)); D:EMA(-100*(HHV(HIGH,34)-CLOSE)/(HHV(HIGH,34)-LLV(LOW,34)),4); {} 长期线:A100,COLOR9900FF; 短期线:B100,COLOR888888; 中期线:D100,COLORYE…

作者头像 李华
网站建设 2026/6/22 18:53:44

揭秘Open-AutoGLM线索分级机制:如何用AI提升销售转化率300%

第一章&#xff1a;揭秘Open-AutoGLM线索分级机制的核心价值在智能化客户运营体系中&#xff0c;线索的高效转化依赖于精准的分级判断。Open-AutoGLM 通过融合大语言模型的理解能力与业务规则引擎&#xff0c;构建了一套动态、可解释的线索分级机制&#xff0c;显著提升了销售资…

作者头像 李华
网站建设 2026/6/25 23:37:59

8.logging日志模块

文章目录2.接口自动化测试2.8 logging日志模块2.8.1 介绍2.8.2 使用示例1&#xff1a;全局logging示例2&#xff1a;自定义logger并输出到控制台示例3&#xff1a;自定义logger并输出到日志文件示例4&#xff1a;设置日志格式2.接口自动化测试 2.8 logging日志模块 2.8.1 介绍…

作者头像 李华
网站建设 2026/6/25 6:25:51

大数据领域数据合规的重要性及实现策略

大数据领域数据合规的重要性及实现策略 关键词:数据合规、隐私保护、GDPR、数据治理、数据安全、合规框架、数据生命周期 摘要:随着大数据技术的快速发展,数据合规已成为企业不可忽视的重要议题。本文深入探讨了大数据领域数据合规的核心概念、法律框架和技术实现策略,分析…

作者头像 李华