请用java写出:如果有一个集合,需要遍历出每条的时间区间,并判断每条对象的区间是否重合,如重合,则重合的部分不重复统计,如有一段时区包含了另一段时区,则被包含的那段时区不重复统计,最后输出总时间秒数。
时间: 2024-04-30 20:21:44 浏览: 208
以下是一个示例代码,假设对象类为TimeRange:
```java
public static int getTotalSeconds(List<TimeRange> timeRanges) {
// 首先按照开始时间排序
Collections.sort(timeRanges, Comparator.comparing(TimeRange::getStart));
int totalSeconds = 0;
int currentStart = 0;
int currentEnd = 0;
for (TimeRange timeRange : timeRanges) {
if (timeRange.getStart() > currentEnd) {
// 新的时间段与当前时间段不重叠
totalSeconds += currentEnd - currentStart;
currentStart = timeRange.getStart();
currentEnd = timeRange.getEnd();
} else if (timeRange.getEnd() > currentEnd) {
// 新的时间段与当前时间段有部分重叠
currentEnd = timeRange.getEnd();
}
}
// 处理最后一个时间段
totalSeconds += currentEnd - currentStart;
return totalSeconds;
}
```
需要注意的是,这个算法的时间复杂度是 O(nlogn),其中 n 是时间段的数量,因为需要对所有时间段按照开始时间排序。如果时间段数量非常大,可能需要采用其它算法优化。
阅读全文