本文共 1792 字,大约阅读时间需要 5 分钟。
要解决这一问题,我们需要合并所有重叠的区间,返回一个不重叠的区间数组。以下是详细的实现思路:
import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;import java.util.List;public class Solution { public int[][] merge(int[][] intervals) { if (intervals.length == 0 || intervals.length == 1) { return intervals; } // 对区间的左端点进行排序 Arrays.sort(intervals, new Comparator() { public int compare(int[] o1, int[] o2) { return o1[0] - o2[0]; } }); // 使用动态数组保存结果 List lists = new ArrayList<>(); int start = intervals[0][0]; int end = intervals[0][1]; for (int i = 1; i < intervals.length; i++) { int[] current = intervals[i]; if (current[0] > end) { // 没有重叠,将当前区间加入结果 lists.add(new int[]{start, end}); start = current[0]; end = current[1]; } else { // 有重叠,更新当前区间的右端点 end = Math.max(end, current[1]); } } // 将最后一个区间加入结果 lists.add(new int[]{start, end}); int[][] res = new int[lists.size()][]; for (int i = 0; i < lists.size(); i++) { res[i] = lists.get(i); } return res; }}
这个方法高效且清晰,能够正确地合并所有重叠的区间,并返回一个不重叠的区间数组。
转载地址:http://aegyk.baihongyu.com/