这是存在问题的,元素数量位置,你这里只取了元素0
时间: 2024-02-28 07:52:54 浏览: 41
非常抱歉,我的回答有误。确实,按照我的实现方式,只考虑了第一个议题作为指针的起点。正确的做法是,遍历所有议题,对于每一个议题,都要检查它和之前所有议题是否存在时间冲突。为了避免重复比较,可以使用一个 Set 来存储已经检查过的议题。具体实现可以按照以下步骤:
1. 将所有议题按照开始时间从早到晚排序,可以使用 `Collections.sort()` 方法,其中需要自定义一个 `Comparator` 对象来实现按照开始时间排序。
2. 遍历所有的议题,对于每一个议题 `curr`,遍历之前的所有议题,检查其结束时间加上中场休息时间是否在 `curr` 的开始时间之前,如果是,则说明存在时间冲突,抛出异常。检查完之后,将 `curr` 加入到 Set 中,表示已经检查过了。
3. 如果所有议题都检查完了,仍然没有发现时间冲突,则说明会议议程没有问题。
以下是示例代码实现:
```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());
}
});
// 用一个 Set 来保存已经检查过的议题
Set<MeetingTopicsVo> checked = new HashSet<>();
for (MeetingTopicsVo curr : meetingTopicsVos) {
// 遍历之前所有的议题,检查是否存在时间冲突
for (MeetingTopicsVo prev : checked) {
if (prev.getEndTime().plusMinutes(prev.getRestTime()).isAfter(curr.getStartTime())) {
log.error("存在议题时间冲突数据:{}", curr);
throw new BusinessException(ExceptionCode.PARAM_CHECK_FAILED, "存在议题时间冲突数据,请检查!");
}
}
// 将当前议题加入到 Set 中
checked.add(curr);
}
}
```
这样实现,可以正确地检查所有议题是否存在时间冲突。时间复杂度为 O(n^2),虽然比之前的实现慢,但对于一些小规模的数据,已经足够快了。如果需要处理大规模的数据,可以考虑使用一些更高效的算法。