如何实现
时间: 2024-02-29 13:52:19 浏览: 42
具体实现可以按照以下步骤:
1. 将所有议题按照开始时间从早到晚排序,可以使用 `Collections.sort()` 方法,其中需要自定义一个 `Comparator` 对象来实现按照开始时间排序。
2. 使用一个指针 `p` 来指向当前的议题,初始值为 0。
3. 遍历所有的议题,对于每一个议题 `i`,检查其开始时间是否在指针所指的议题的结束时间之后,如果是,则更新指针 `p` 的值为 `i`。
4. 如果存在时间冲突,则抛出异常。
以下是示例代码实现:
```java
private void checkTopicTime(List<MeetingTopicsVo> meetingTopicsVos) {
// 按照开始时间排序
Collections.sort(meetingTopicsVos, new Comparator<MeetingTopicsVo>() {
@Override
public int compare(MeetingTopicsVo o1, MeetingTopicsVo o2) {
return o1.getStartTime().compareTo(o2.getStartTime());
}
});
// 使用指针来指向当前的议题
MeetingTopicsVo p = meetingTopicsVos.get(0);
for (int i = 1; i < meetingTopicsVos.size(); i++) {
MeetingTopicsVo curr = meetingTopicsVos.get(i);
// 检查当前议题和指针所指的议题是否存在时间冲突
if (curr.getStartTime().isBefore(p.getEndTime().plusMinutes(p.getRestTime()))) {
log.error("存在议题时间冲突数据:{}", curr);
throw new BusinessException(ExceptionCode.PARAM_CHECK_FAILED, "存在议题时间冲突数据,请检查!");
}
// 更新指针
p = curr;
}
}
```
这样实现,时间复杂度为 O(nlogn),比原来的实现要快很多。
阅读全文