我最近在一次采访中被问到这个问题。
问题陈述:你有两次定期约会。每个约会都包含所需的开始时间、可选的结束时间和重复规则(必需)。下面列出了所有递归规则:
你必须检查重叠2以上的事件。
我有一个解决日常复发的办法。
首次预约:开始时间:1/3/2018(dd/MM/YYYY),结束时间:,复发规则:每2天
第二次预约:开始时间:2018年3月3日(dd/MM/YYYY),结束时间:每3天一次
第一次预约的后几天:1 2*x
第二次预约的第二天:3*y
如果两个重叠约会:1 2*x=3 3*y
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).
9/1/2018两项任命重叠
如果两个约会没有结束时间,我的查找循环(x,y)将没有表达式-2。所以,如果方程不可能解,那就很糟糕了。
有人能有其他解决办法吗?
我对回答堆栈溢出是新手,所以希望这是有意义的:
周基本上可以归结为7天一组,年基本上可以归结为12个月一组
我们不能说一个月或一年是几天,因为月份的长度不同(2月28/29日对3月31日),也有闰年需要注意。
这意味着,如果第一次约会以天/周为单位重复出现,第二次约会以月/年为单位重复出现,它们必须在某个时候重叠。我没有正式的证据,但是我想在一些数学教科书里有几页关于这个的理论。现在约会匹配的日期可以用类似于你上面编码的算法找到。实际上,使用一个库来记录日期可能是明智的,因为闰年、月份等。但是在面试中,我认为他们不期望你这样做。
如果两次约会都来自同一个“家庭”(两次约会都可以用天来衡量,或者两次约会都可以用月来衡量),那么第一次约会的重复次数(n)是第二次约会的重复次数(m)的倍数,或者第二次约会的重复次数(m)是第二次约会的倍数,则两次约会不会在同一天发生。
if(n<=m && n%m==0 || m<=n && m%n==0) {
//they won't happen on the same day/month
}
最后要注意的一点是,如果两次约会都是每月/每年重复一次,那么一个月的哪一天就需要匹配,否则就永远不会在同一天发生。
至少我是这么看的。希望这有帮助:)
问题内容: 我想看看我从数据库读取的时间是否与用户提供的时间重叠。 我的数据库如下所示: 我的代码如下所示: 如果我故意输入两次重叠的时间,则不会回显错误。我究竟做错了什么? 问题答案: 当且仅当以下条件中的至少一个成立时,两个时间段P1和P2重叠: P1在P2的开始和结束之间开始() P2在P1的开始和结束之间开始() 这将捕获部分重叠的期间以及一个完全覆盖另一个期间的期间。如果两个周期重叠,则
问题内容: 我有一个这样的表: 我想禁止给定的重叠间隔 编辑:我发现了一些东西: 如果您想了解更多有关此信息,请访问http://www.depesz.com/2010/01/03/waiting-for-8-5-exclusion- constraints/ 我唯一的问题是,它不能将空值用作结束时间戳记,我曾想将其替换为无限值,但效果不佳。 问题答案: 好吧,我最终这样做了: 与无限,交易证明完
我试图找出两个矩形是否相互重叠。我将下面的矩形表示为< code>[x1,x2] x [y1,y2] 我只需要一个伪代码,我可以实现它来查找矩形是否彼此重叠。
问题内容: 如何删除此设置中的重复项? 在这里,我要删除两次的(apple,2)。ID号是唯一的。如果没有,我会使用DISTINCT关键字。我可以通过A列和B列创建一个键,然后使用DISTINCT关键字获得所需的内容吗?非常感谢您的答复。 问题答案: 也就是说,括号中的select返回A和B的每个分组的第一个ID;删除不在此集合中的所有ID,将删除A-B组合首次出现后的所有出现。 编辑 :此语法似
我创建了一个事件。现在我想检查它们是否重叠。我在数据库中以日期格式存储了开始时间和结束时间。 现在我想检查事件的时间是否重叠。为此,我想获取所有事件start Time和endTime,从日期检索小时和分钟,然后将小时和分钟与当前小时和分钟进行比较。 日期格式如下:df=新的SimpleDateFormat(“E-MMM-dd-HH:mm:ss-zz-yyyy”); 我第一次尝试通过查询比较两个日