本文共 1273 字,大约阅读时间需要 4 分钟。
要解决给定一组区间并合并所有重叠区间的问题,可以按照以下步骤进行:
首先,将所有区间按照起点进行升序排序。这样可以方便地比较相邻区间,判断是否存在重叠。
创建一个空的结果列表,用于存储最终的合并区间。
如果输入的区间集合为空,直接返回空数组。
从排序后的第一个区间开始遍历,逐个检查相邻区间是否存在重叠。
对于当前区间和下一个区间,检查当前区间的结束点是否大于等于下一个区间的起点。如果是,说明存在重叠,合并两个区间,更新当前区间的结束点。如果不是,添加下一个区间到结果列表,并更新当前区间。
将结果列表转换为数组并返回。
以下是Java实现的代码:
import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Solution { public int[][] merge(int[][] intervals) { List res = new ArrayList<>(); if (intervals.length == 0) { return new int[0][]; } Arrays.sort(intervals, (a, b) -> a[0] - b[0]); int[] current = intervals[0]; res.add(current); for (int i = 1; i < intervals.length; i++) { int[] next = intervals[i]; if (next[0] <= current[1]) { current[1] = Math.max(current[1], next[1]); } else { res.add(next); current = next; } } return res.toArray(new int[][]); }} Arrays.sort对区间数组进行排序,确保区间按起点升序排列。res,并处理空输入情况。这个方法确保了所有重叠区间被正确合并,时间复杂度为O(n log n),主要来自于排序操作。
转载地址:http://rxhiz.baihongyu.com/