一、题目概述
二、思路方向
为了解决这个问题,我们可以遍历给定的区间列表
intervals
,并同时构建一个新的列表来存储最终的合并结果。遍历过程中,我们检查当前区间是否与newInterval
重叠或相邻,并根据需要进行合并。如果不重叠,则直接将当前区间添加到结果列表中。
三、代码实现
import java.util.ArrayList;
import java.util.List; public class Solution { public int[][] insert(int[][] intervals, int[] newInterval) { List<int[]> merged = new ArrayList<>(); int i = 0; int n = intervals.length; // 添加所有不与 newInterval 重叠的区间到 merged while (i < n && intervals[i][1] < newInterval[0]) { merged.add(intervals[i]); i++; } // 合并重叠的区间 while (i < n && intervals[i][0] <= newInterval[1]) { newInterval[0] = Math.min(newInterval[0], intervals[i][0]); newInterval[1] = Math.max(newInterval[1], intervals[i][1]); i++; } // 添加合并后的 newInterval merged.add(newInterval); // 添加剩余的不重叠区间 while (i < n) { merged.add(intervals[i]); i++; } // 将 List 转换为二维数组 int[][] result = new int[merged.size()][2]; for (i = 0; i < merged.size(); i++) { result[i] = merged.get(i); } return result; } public static void main(String[] args) { Solution solution = new Solution(); int[][] intervals = {{1, 3}, {6, 9}}; int[] newInterval = {2, 5}; int[][] mergedIntervals = solution.insert(intervals, newInterval); // 打印合并后的区间 for (int[] interval : mergedIntervals) { System.out.println(java.util.Arrays.toString(interval)); } }
}
执行结果:
四、小结
这段代码首先遍历
intervals
列表,将所有与newInterval
不重叠的区间添加到merged
列表中。然后,它继续遍历intervals
列表,将所有与newInterval
重叠或相邻的区间与newInterval
合并,更新newInterval
的起始和结束位置。之后,将合并后的newInterval
添加到merged
列表中,并继续将剩余的区间添加到merged
列表中。最后,将merged
列表转换为二维数组并返回。在示例的
main
方法中,我们测试了给定的示例输入,并打印了合并后的区间列表。
结语
星光不问赶路人
时光不负有心人
!!!