当前位置: 首页 > 知识库问答 >
问题:

检查重叠2重复约会?

鲁峰
2023-03-14

我最近在一次采访中被问到这个问题。

问题陈述:你有两次定期约会。每个约会都包含所需的开始时间、可选的结束时间和重复规则(必需)。下面列出了所有递归规则:

  • 每日:示例:每2天
  • 每周:示例:每3周在星期二
  • 每月:示例:每2个月第17天/每月第三个星期二
  • 每年:示例:每两年4月17日

你必须检查重叠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。所以,如果方程不可能解,那就很糟糕了。

有人能有其他解决办法吗?

共有1个答案

卢志行
2023-03-14

我对回答堆栈溢出是新手,所以希望这是有意义的:

周基本上可以归结为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”); 我第一次尝试通过查询比较两个日