56. 合并区间
可阿奇 2024/4/18 算法
题目链接:56. 合并区间 (opens new window)
这题思路很简单,感觉没什么说的,模拟即可,顺带复习Comparator构建。先对区间排序,然后维护一个left和right边界。代码如下:
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> merged = new ArrayList<int[]>();
//array1[0] < array2[0]时返回负数,优先级array1[0] < array2[0],所以这里排序是按左边界从小到大
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] array1, int[] array2) {
return array1[0] != array2[0] ? array1[0] - array2[0] : array1[1] - array2[1];
}
});
int left = intervals[0][0], right = intervals[0][1];
for (int i = 0; i < intervals.length; i++) {
//左边界与当前右边界重合,而且右边界比当前右边界更长
if (intervals[i][0] <= right && intervals[i][1] > right) {
right = intervals[i][1];
}
//左边界与当前右边界不重合,把当前区间添加进结果,然后开启一个新区间
if (intervals[i][0] > right) {
merged.add(new int[] { left, right });
left = intervals[i][0];
right = intervals[i][1];
}
}
merged.add(new int[] { left, right });//区间遍历完了还需要一次添加
return merged.toArray(new int[merged.size()][]);
}
}
``