确定范围是否重叠

jas*_*ogd 2 c java math boolean

给定具有整数开始和结束时间的两个事件,E1 =(s1,e1),E2 =(s2,e2),实现快速布尔检查以查看事件是否重叠.

我有解决方案,但我很想知道其他人想出了什么.

编辑:好的,这是我的解决方案:

e1 > s2 || (s1 > s2 && e2 < s1)
Run Code Online (Sandbox Code Playgroud)

Fre*_*son 16

bool overlap = (s1 <= e2) && (s2 <= e1)


Chr*_*man 8

弗雷德的答案既简洁又正确.

我更喜欢:

bool overlap = !(e1 < s2 || e2 < s1);
Run Code Online (Sandbox Code Playgroud)

我认为这更清楚,但这是一个非常小的差异.

转换为英语:

如果两个都没有在另一个开始之前结束,


这类似于重叠矩形问题.编写该测试有两种好方法.它们对应于以下陈述:

如果两个矩形的左边缘位于另一个边缘的左边缘,则两个矩形重叠,两个矩形的顶边缘位于另一个边缘的上边缘之上.


如果两个矩形都不在左侧或在另一个上方,则两个矩形重叠.


Dan*_*olo 5

它们重叠如果:

  • e1(包括两个端点)s2e2 OR之间
  • e2之间(包括两个端点)s1e1


fin*_*nnw 5

这也将起作用:

max(s1, s2) < min(e1, e2)
Run Code Online (Sandbox Code Playgroud)