Java实现多个时间段取并集
时间: 2023-11-14 19:13:20 浏览: 152
Java获取各种时间
可以使用一个二维数组来表示多个时间段,每一行表示一个时间段,第一列表示开始时间,第二列表示结束时间。然后按照开始时间对所有时间段进行排序,依次遍历每个时间段,如果当前时间段和前一个时间段有重叠部分,则将它们合并成一个时间段,否则将当前时间段加入结果集。
以下是Java代码实现:
```java
public static int[][] mergeTimeIntervals(int[][] intervals) {
// 按照开始时间排序
Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));
List<int[]> merged = new ArrayList<>();
for (int i = 0; i < intervals.length; i++) {
int[] curr = intervals[i];
if (merged.isEmpty() || merged.get(merged.size() - 1)[1] < curr[0]) {
// 没有重叠部分,直接加入结果集
merged.add(curr);
} else {
// 有重叠部分,合并时间段
merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], curr[1]);
}
}
return merged.toArray(new int[merged.size()][]);
}
```
测试:
```java
int[][] intervals = {{1, 3}, {2, 6}, {8, 10}, {15, 18}};
int[][] merged = mergeTimeIntervals(intervals);
for (int[] interval : merged) {
System.out.println(Arrays.toString(interval));
}
// 输出:[1, 6], [8, 10], [15, 18]
```
阅读全文