一.引言
今天在写一块逻辑,判断两个时间端是否含有交集。假设有两个时间端,一个是timeA到timeB,另一个是timeC到timeD。我在草稿本上画了一下,情况有这些:
然后我就想用代码把这些情况都写出来,虽然最后也写出来了,但是过程艰辛。
代码如下(不考虑临界值):
(timeA.getTime() < timeC.getTime() && timeB.getTime() > timeC.getTime()) ||
(timeA.getTime() > timeC.getTime() && timeA.getTime() < timeD.getTime()
二.简易思路
以上是正常的思路,然后突然又想到了中学学习的逆向思路,其实也就是判断两个时间端没有交集的情况,然后取反即可。如下是两个时间端没有交集的情况:
代码如下:
timeA.getTime > timeD.getTime || timeB.getTime < timeC.getTime()
取反即可得到判断两个时间端是否含有交集的代码,如下:
timeA.getTime < timeD.getTime && timeB.getTime > timeC.getTime()
这些就可以很容易去判断了。(逆向思维。。。)