找到与其他表格最相交的间隔的起点和终点

问题描述

这是一个任务:

夏季花卉展览的策划人正在为活动做准备。他们必须找到一个最大的花朵盛开的时期。他们有一个包含(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

  • 视觉表示(与“ txt”中的数据不同)

enter image description here

首先,我将介绍我的方法

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

现在考虑这个问题时,我脑海中浮现出一个想法,那就是我可以尝试构建一个92天的结构 然后计算出哪几天包含最多的开花季节。这将很容易,但是我对这种解决方案不满意,因为它效率太低。 (笑声)与我当前的代码相提并论,该代码一次又一次地匹配间隔。效率仍然低下吗? :D

我也一直在互联网上寻找答案,但是设法只找到了一半。

总而言之,我很想听听其他意见。有什么方法可以正确处理此问题?我的方法合理吗?还是我应该寻找另一种方法?您的帮助将不胜感激。再次,我不是要一个完整的解决方案,只是向答案轻推。预先感谢。

解决方法

通过增加日期对所有时间间隔进行排序,将它们的开始权重+1并结束权重-1。

现在按时间顺序扫描列表,同时添加点权重。每次,这都会给出不同的盛开花朵数量。您的情况是012345456 ... 0。

同时,使边界保持到目前为止的最高计数(如果是平局,则保持最早的值)。最高间隔的结尾就是下一个边界。


如果多个间隔同时开始或结束,请处理那些先结束的间隔,以避免零持续时间的解决方案。 (要实现这一点,就可以设计一个比较函数,使得在平局的情况下,-1为优先。)