【发布时间】:2018-09-26 22:00:35
【问题描述】:
我最近在一次采访中被问到这个问题。
问题陈述:您有 2 次定期约会。每个约会都包含一个必需的开始时间、一个可选的结束时间和一个重复规则(必需)。 下面列出了所有重复规则:
- 每天:例如:每 2 天
- 每周:例如:每 3 周的周二
- 每月:例如:每 2 个月的第 17 天/每月的第三个星期二
- 每年:例如:每 2 年的 4 月 17 日
您必须检查上述事件的重叠 2。
我有一个每日重复的解决方案。
第一次约会:开始时间:1/3/2018(dd/MM/YYYY),结束时间:,重复规则:每 2 天
第二次约会:开始时间:3/3/2018(dd/MM/YYYY),结束时间:,重复规则:每 3 天
第一次约会的第二天:1 + 2*x
第二次约会的第二天:3 + 3*y
如果两个重叠约会:1 + 2*x = 3 + 3*y 2*x - 3*y = 2;
int x = 0;
int y = 0;
for(x=1; ; x++){
for(y=1; ; y++){
if(2*x - 3*y == 2){
break;
}
}
}
(x,y) = (4,2).
两个约会在 2018 年 9 月 1 日重叠
如果两个约会没有结束时间,我的查找 (x,y) 循环将没有表达式 2。所以,如果方程无法解,那就很糟糕了。
谁能为此提供其他解决方案?
【问题讨论】:
-
您可能想了解线性丢番图方程 - 以获得一般解或发现解不存在
-
这很复杂,但可能并非不可能。没有人能在面试中给出完整的解决方案。我的猜测是他们希望你对挑战以及如何应对挑战发表一些看法。就像一个在星期一,另一个在星期四,你已经可以看出没有重叠。
-
是一日一整天的活动吗?所以结束时间是指重复结束的时间,而不是个人约会结束的时间??
-
tks @MBo。我读过关于线性丢番图方程的文章。它对我有好处。
-
tks @Ole V.V.这对我来说非常非常复杂。问题太多
标签: java algorithm calendar overlap