0

检查这个的最有效方法是什么:

A is scheduled for 4 - 7;
B is scheduled for 5 - 8;

上述时间表重叠。在以下示例中,如果 A 和 B 重叠,我如何检查 Java:

为一个

int start = 4;
int end = 7;

对于乙

int start = 5;
int end = 8;

请告知检查是否重叠的最有效方法。谢谢你

4

3 回答 3

2

最有效的方法是使用区间树

于 2013-08-31T17:29:20.207 回答
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;
}
于 2013-08-31T18:56:47.753 回答
0

如果您只处理一些数据,那么即使只是比较开始和结束也足够快。但是,如果您正在处理大数据,您可能希望在这里使用一些其他数据结构,例如增强树来获得一些效率。

于 2013-08-31T17:27:52.437 回答