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

前端做兼职网站中国室内设计网联盟

前端做兼职网站,中国室内设计网联盟,地方网 wordpress,app线上推广是什么工作文章目录 一、问题描述二、解决思路三、完整代码实现四、关键代码解析1. 区间排序逻辑2. 合并重叠区间3. 列表转数组 五、复杂度分析六、总结 本文重点:本文通过Java代码实现经典的 区间合并算法,详细解析排序、合并逻辑及关键代码片段,帮助…

文章目录

    • 一、问题描述
    • 二、解决思路
    • 三、完整代码实现
    • 四、关键代码解析
      • 1. 区间排序逻辑
      • 2. 合并重叠区间
      • 3. 列表转数组
    • 五、复杂度分析
    • 六、总结

本文重点:本文通过Java代码实现经典的 区间合并算法,详细解析排序、合并逻辑及关键代码片段,帮助读者掌握处理重叠区间问题的核心思路。


一、问题描述

给定一组区间 intervals,其中每个区间表示为 [start_i, end_i],要求合并所有重叠的区间,并返回一个不重叠的区间数组,且这些区间需要覆盖所有原始区间。

示例

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

二、解决思路

合并重叠区间的核心步骤可分为以下两步:

  1. 按起始点排序
    将区间按起始点从小到大排序,确保遍历时只需关注相邻区间是否重叠。

  2. 线性扫描合并
    维护一个合并后的区间列表,依次将每个区间与列表最后一个区间比较:

    • 若当前区间与前一个区间重叠,合并它们(更新结束点)。
    • 若不重叠,直接加入列表。

三、完整代码实现

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Solution {public int[][] merge(int[][] intervals) {if (intervals == null || intervals.length == 0) {return new int[0][];}// 1. 按区间起始点排序Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));List<int[]> merged = new ArrayList<>();merged.add(intervals[0]);// 2. 合并重叠区间for (int i = 1; i < intervals.length; i++) {int[] last = merged.get(merged.size() - 1);int[] current = intervals[i];if (current[0] <= last[1]) {// 合并区间,更新结束点last[1] = Math.max(last[1], current[1]);} else {merged.add(current);}}// 3. 转换List到二维数组return merged.toArray(new int[merged.size()][]);}
}

四、关键代码解析

1. 区间排序逻辑

Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
  • 作用:按区间的起始点(start)升序排序。
  • 示例
    排序前:[[3,5], [1,2], [4,7]] → 排序后:[[1,2], [3,5], [4,7]]
  • 为什么需要排序
    排序后,所有区间按起始点有序排列,只需比较相邻区间即可判断是否重叠,无需回溯。

2. 合并重叠区间

if (current[0] <= last[1]) {last[1] = Math.max(last[1], current[1]);
} else {merged.add(current);
}
  • 逻辑
    • 当前区间的起始点(current[0])如果小于等于合并列表中最后一个区间的结束点(last[1]),说明两个区间重叠,合并后的结束点取二者的较大值。
    • 否则,直接将当前区间加入列表。

3. 列表转数组

return merged.toArray(new int[merged.size()][]);
  • 作用:将 List<int[]> 转换为 int[][]
  • 参数意义
    传入 new int[merged.size()][] 是为了指定返回数组的类型为 int[][]。实际返回的数组长度由列表大小决定,传入的数组仅作为类型标记。

五、复杂度分析

  • 时间复杂度

    • 排序:O(n log n)Arrays.sort 使用快速排序。
    • 合并:O(n),线性遍历一次。
      总时间复杂度O(n log n)
  • 空间复杂度

    • 存储合并结果:O(n)(最坏情况下无重叠区间)。
    • 排序的栈空间:O(log n)
      总空间复杂度O(n)

六、总结

  1. 排序是核心:排序后,只需线性遍历即可合并相邻重叠区间。
  2. 合并逻辑:比较当前区间与合并列表最后一个区间,动态更新结束点。
  3. Java类型转换:通过 toArray 指定返回数组类型,避免类型安全问题。

扩展思考:如果输入区间已经按起始点排序,如何优化算法?此时时间复杂度可降至 O(n)

http://www.dtcms.com/wzjs/812216.html

相关文章:

  • 上海知名网站推广腾讯企业邮箱申请
  • 国内工业设计网站科技部网站支持湖南建设创新型省份
  • 东莞自助建站软件广州市天气
  • 企业网站建设大概费用农村建设网站
  • 网站建设培训 苏州行业网址大全
  • 太原网站seo网站改版方案策划书
  • 小程序 企业网站网页设计top
  • 打开一个网站为繁体字是怎么做的国外电子政务j建设与我国电子政务网站建设对比
  • 普通网站要什么费用wordpress 金融
  • 网站开发技术写什么内容深圳公司注册地址
  • 厦门微网站建设公司哪家好定制app开发的流程
  • 上海做网站公自己制作app需要什么
  • 如何做网站活动html网页制作app下载
  • 英文网站备案专门做问卷的调查的网站
  • 石家庄做网站排名重庆优化网站排名
  • 企业网站建设公司 丰台开发网站的费用属于什么费用
  • 免费素材下载网站有哪些搭建网站建设
  • 新开三端互通传奇网站免费外链生成器
  • 建设企业网站模板下载江苏网站建设哪家快点
  • 阳泉市住房保障和城乡建设管理局网站小程序登录密码怎么找回
  • wordpress怎么改端口网站站内优化
  • 山东省建设机械协会网站青岛网站seo收费标准
  • 这样建立自己的网站苏州工业园区属于哪个区
  • 徐州学习网站建设编程能干什么
  • 中山建设局网站首页网站建设私单合同
  • 建设单位应该关注的网站项目建设的背景怎么写
  • 邯郸医疗网站建设南宁app下载
  • 化妆品品牌网站建设网站搭建注意事项
  • 乔拓云建站有免费的吗网站模板站的模板展示怎么做的
  • 金泉网做网站要找谁网络科技公司名字起名大全