找回密码
 立即注册
首页 业界区 安全 Java 解算法:合并区间

Java 解算法:合并区间

奸轲嫣 4 天前
题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]
这个题的目标是合并所有重叠的区间。解题思路是,先把数组的元素进行排序,再合并区间。
为什么要排序呢?因为将区间按照起始元素排序,才能让我们非常清晰地识别重叠的区间。
排序:首先,根据每个区间的起始元素对区间进行排序(按照首元素从小到大排)。
合并:然后,遍历排序后的区间列表,检查当前区间是否与前一个区间重叠。 如果重叠,合并这两个区间;如果不重叠,将当前区间添加到结果列表中。
具体步骤:

  • 排序:使用 Arrays.sort 方法对区间进行排序,排序的依据是每个区间的起始元素大小。
  • 合并:使用一个 LinkedList 来存储合并后的区间。遍历排序后的区间列表,对于每个区间,检查它是否与 LinkedList 中最后一个区间重叠。如果重叠,合并这两个区间;如果不重叠,将当前区间添加到 LinkedList 中。
  • 返回结果:将 LinkedList 转换为数组并返回。
我的Java代码:
[code]class Solution {    public int[][] merge(int[][] intervals) {        if (intervals.length  a[0] - b[0]);                LinkedList merged = new LinkedList();        merged.add(intervals[0]);        int length = intervals.length;                for (int i = 1; i < length; i++) {            int[] current = intervals;            int[] lastMerged = merged.getLast();                        // 检查当前区间是否与最后一个合并的区间重叠            if (current[0]
您需要登录后才可以回帖 登录 | 立即注册