普通数组
📌 56. 合并区间
以数组intervals
表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi]
请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public static int[][] merge(int[][] intervals) {
// 先排序,第二个参数是匿名函数,比较两个数组的第一个元素,升序
// 用python语法写则是: intervals.sort(key=lambda x: (x[0], x[1]))
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> res = new ArrayList<>();
int[] current = intervals[0];
res.add(current);
for (int[] interval : intervals) {
int currentEnd = current[1];
int nextBegin = interval[0];
int nextEnd = interval[1];
if (currentEnd >= nextBegin) {
// 当前区间结束值大于下一区间开始值,则重叠需要合并区间
current[1] = Math.max(currentEnd, nextEnd);
} else {
// 反之不重叠,追加至arraylist即可
res.add(interval);
current = interval; // 用于下次循环进行比较
}
}
return res.toArray(new int[res.size()][]);
}
public static void main(String[] args) {
int[][] intervals = {{1, 3}, {2, 6}, {8, 10}, {15, 18}};
int[][] tmp = merge(intervals);
for (int[] interval : tmp) {
System.out.println(Arrays.toString(interval));
}
}
}