运动场上有很多组照明设备,下面A集合中,描述出了不同照明设备的启动(begintime)停止(endtime)时间,照明设备的id已经处理掉了无需考虑,仔细看这些时间段可以发现,这些时间有重合(表示这段时间多组照明同时亮)、有空挡(表示这段时间一组照明都没有开)。请通过java代码实现,获得此足球场上有照明设备开启的时间段集合(求A集合在时间维度上的并集)
时间: 2024-01-29 15:02:24 浏览: 106
py代码-输入包含若干集合的列表,输出这些集合的并集。 提示:使用reduce()函数和operator模块中的运算实现多个集合的并集。
以下是一段 Java 代码,可以获得足球场上有照明设备开启的时间段集合:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
List<TimeRange> a = new ArrayList<>();
a.add(new TimeRange(1, 5));
a.add(new TimeRange(3, 7));
a.add(new TimeRange(2, 6));
a.add(new TimeRange(8, 10));
List<TimeRange> result = mergeTimeRanges(a);
for (TimeRange tr : result) {
System.out.println(tr.getBegintime() + "-" + tr.getEndtime());
}
}
public static List<TimeRange> mergeTimeRanges(List<TimeRange> timeRanges) {
if (timeRanges == null || timeRanges.size() == 0) return new ArrayList<>();
Collections.sort(timeRanges, new Comparator<TimeRange>() {
@Override
public int compare(TimeRange o1, TimeRange o2) {
return o1.getBegintime() - o2.getBegintime();
}
});
List<TimeRange> result = new ArrayList<>();
int start = timeRanges.get(0).getBegintime();
int end = timeRanges.get(0).getEndtime();
for (int i = 1; i < timeRanges.size(); i++) {
TimeRange current = timeRanges.get(i);
if (current.getBegintime() <= end) {
end = Math.max(end, current.getEndtime());
} else {
result.add(new TimeRange(start, end));
start = current.getBegintime();
end = current.getEndtime();
}
}
result.add(new TimeRange(start, end));
return result;
}
}
class TimeRange {
private int begintime;
private int endtime;
public TimeRange(int begintime, int endtime) {
this.begintime = begintime;
this.endtime = endtime;
}
public int getBegintime() {
return begintime;
}
public int getEndtime() {
return endtime;
}
}
```
这段代码中,我们定义了一个 `TimeRange` 类,用于表示时间段。然后,我们编写了一个名为 `mergeTimeRanges` 的方法,它接收一个 `List` 类型的参数 `timeRanges`,表示所有照明设备的开启时间段。方法首先对时间段进行排序,然后遍历时间段,将重叠的时间段合并成一个新的时间段,并将新的时间段添加到结果集合中。最后,方法返回结果集合。
我们在 `main` 方法中创建了一个 `List` 对象 `a`,表示所有照明设备的开启时间段。然后,我们调用 `mergeTimeRanges` 方法,将 `a` 作为参数传入,获取所有照明设备开启的时间段集合,并将集合中的每个时间段输出到控制台。
阅读全文