Algorithm 给定时间表,查找医生办公室的所有冲突预约

Algorithm 给定时间表,查找医生办公室的所有冲突预约,algorithm,Algorithm,您有“n”个约会。每个约会包含开始时间和结束时间。您必须高效地重新运行所有冲突的约会开始时间和结束时间可以从几分钟到几年不等。我看到了帖子:与此非常相似。但仍有疑问 我的问题是,如果我们有一个排序的时间表,比如:(6:30-6:35),(6:40-7:10)(7:25-7:40),(7:35-7:50)等等 我们能不能浏览一下时间表,确保下一次约会只在前一次约会结束后才开始?在这种情况下,我们对安排约会的可能时间施加了非常严格的限制。在本例中,我们知道7:35开始的约会在最后一次约会结束(7:4

您有“n”个约会。每个约会包含开始时间和结束时间。您必须高效地重新运行所有冲突的约会开始时间和结束时间可以从几分钟到几年不等。我看到了帖子:与此非常相似。但仍有疑问

我的问题是,如果我们有一个排序的时间表,比如:(6:30-6:35),(6:40-7:10)(7:25-7:40),(7:35-7:50)等等

我们能不能浏览一下时间表,确保下一次约会只在前一次约会结束后才开始?在这种情况下,我们对安排约会的可能时间施加了非常严格的限制。在本例中,我们知道7:35开始的约会在最后一次约会结束(7:40)之前,因此这是一个冲突。我们真的需要通过创建一个树或散列映射来使解决方案复杂化吗?正如链接中针对类似问题的最受欢迎的解决方案中提到的那样


请指出可以绕过此检查的情况,并证明此条件无效

当然,如果您说“我们有一个已排序的日程安排”,解决方案可以在O(n)个时间内执行。您提到的问题是假设时间没有排序。

在链接答案中,列表约会没有排序,因此是更复杂的解决方案。如果对约会进行了排序,您就可以遍历列表并跟踪到目前为止看到的最新结束时间,这是正确的


另外,请注意,对列表进行排序是
O(n lg n)
,因此如果需要
O(n)
解决方案,您不能只对列表进行排序然后遍历它。

感谢您的快速响应。我想确定一下,因为解决方案说,“算法基本上包括检查下一个约会是否与之前的约会重叠。”你必须检查之前的约会。约会不一定与之前的约会重叠,例如:
(0,5)、(2,3)、(4,8)
第三次约会与第一次约会重叠,但与第二次约会不重叠。然而,你实际上不必将每个约会与其他约会进行比较,你只需跟踪到目前为止看到的最新结束时间。但是,如果我们只需要找出是否有重叠,我们将停止在第二个约会本身。你说“第三次约会与第一次约会重叠,但与第二次约会不重叠”是对的。但第二次约会在第一次约会结束之前开始,因此我们从未真正进入第三次约会。没错,但是你的问题标题是“查找所有冲突的约会”,而不是查找第一次约会。:)