检查此内容的最有效方法是什么:
A is scheduled for 4 - 7;
B is scheduled for 5 - 8;
上面的时间表重叠。如果A和B在以下示例中重叠或如何重叠,我该如何检查Java:
对于A
int start = 4;
int end = 7;
对于B
int start = 5;
int end = 8;
请告知最有效的方法来检查是否重叠。 谢谢
答案 0 :(得分:2)
最有效的方法是使用interval tree。
答案 1 :(得分:1)
以下逻辑应该用于测试重叠。这是从结束日期开始向后工作的负离散检查。其他检查方法是采用参考开始时间,如data.getTime()
private boolean testOverlap(Date sched1Start, Date sched1End, Date sched2Start, Date sched2End) {
//Validate ranges to check if End dates are after start dates
//Overlaps if both schedules end at same time
if(sched1End.equals(sched2End)) return true;
//Get which one ends last
if(sched1End.before(sched2End)) {
//Working backwards sched2 starts after sched1 Ends so they dont overlap
if(sched2Start.after(sched1End) || sched2Start.equals(sched1End)) {
//Doesnt overlap
return false;
}
} else {
//Sched1 ends last
if(sched1Start.after(sched2End) || sched1Start.equals(sched2End)) {
//Doesnt overlap
return false;
}
}
return true;
}
答案 2 :(得分:0)
如果您只是处理一些数据,那么即使只是比较开始和结束也足够快。但是,如果您正在处理大数据,则可能需要使用其他数据结构(如增强树)来获得一些效率。