一、题目概述
二、思路方向
为了解决这个问题,我们可以遍历给定的区间列表
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
方法中,我们测试了给定的示例输入,并打印了合并后的区间列表。
结语
星光不问赶路人
时光不负有心人
!!!