找到与其他 table 相交最多的区间的起点和终点

Find a start and an ending of an interval which intersects with the table of others the most

这是一个任务:

夏花展的策展人正在为活动做准备。他们必须找到一个鲜花盛开的时间。他们有一个 table,其中包含 (0

ID、开花季节的开始和结束(StartMonth、StartDay、EndMonth、EndDay)

帮助策展人找到展览中鲜花最多的最早开放时间(间隔的开始和结束)。

注意:正确的时间不一定是已经存在的时间间隔

由于这是一项我想自己完成大部分的作业,因此我只想获得有关如何从理论上解决此问题的建议。

盛开季节的样本:

121 6 15 7 25

102 7 1 8 14

236 6 30 8 31

141 7 31 8 10

111 7 1 7 20

128 6 2 6 3

首先我将介绍我的方法:

  1. 我做的第一件事是将间隔的月和日转换为一个数字格式(MM-DD 中的示例:08-15 我已更改为 30 + 31 + 15 = 76)
  2. 在那之后,我第一次检查了所有的间隔,并单独保存了一个有最多交叉点的间隔。
  3. 稍后我再次检查所有间隔,但这次我将它们专门与保存的间隔进行比较,如果它们不相交,它们就会被删除,这样我就减少了噪音。
  4. 此时我以为剩下要做的就是找到与保存的间隔相交的最小间隔。然而,我错了。我没有考虑到最小的间隔可能只有一个交点。
  5. 一段时间后,我意识到我需要找到一个区间,它在给定集合中具有最多的交点并且最小。但是我怎样才能找到两者呢?
  6. 毫无疑问,我的理论还有更多漏洞。我很确定即使我把它拉下来它仍然会有很多例外。

现在想想我脑子里冒出的一个想法是我可以试着做一个92天的结构 然后计算哪些日子包含最多的开花季节。这会很容易,但我对这个解决方案不满意,因为它效率太低。 (轻笑)与我当前一次又一次匹配间隔的代码相比呢?它仍然是低效的吗? :D

我也在网上搜索了答案,但只找到了一半。

总而言之,我很想听听其他意见。有哪些正确处理的方法?我的方法合理还是我应该寻找另一种方法?非常感谢您的帮助。同样,我不是在要求完整的解决方案,只是轻推答案。提前致谢。

按递增日期对所有间隔边界进行排序,将它们加权 +1 表示开始,-1 表示结束。

现在按时间顺序浏览列表,边走边添加点权重。每次,这都会给出不同盛开的花朵的数量。在你的例子中,012345456... 0.

同时,保持迄今为止给出最高计数的边界(如果出现平局,则保持最早的值)。最高区间的结束就是下一个界限。


如果多个区间同时开始或结束,则处理先结束的区间,以避免 zero-duration 解。 (为了实现这一点,设计一个比较函数就足够了,在平局的情况下,-1 具有优先权。)