首页 > 解决方案 > 按顺序组织/插入日期的算法

问题描述

我需要构建一个算法,可以查看其中有重叠日期的 X 条记录,并按时间顺序组织和重新插入这些日期值。例如:该表有这样的记录:

Start Date  End Date    Value

1/1/2019    12/31/2099  10

当插入这样的新记录时:

5/1/2019    5/31/2019   25

该算法应该像这样组织记录并将其插入到新表中:

1/1/2019    4/30/2019   10
5/1/2019    5/31/2019   25
6/1/2019    12/31/2099  10

不应修改原始表,即不重新插入/重新排序原始表中的记录。

关于实现这一目标的最有效方法的任何提示?不寻找特定于数据库的解决方案.. 仅编程。谢谢!

标签: javaalgorithmsortingdate

解决方案


首先找出日期可以重叠的方式。在我脑海中,时期可能重叠的方式是:

  • 新行的开始日期之前和结束日期之后的行
  • 新行的开始日期早于结束日期,结束日期晚于行的行
  • 开始日期在新行的开始日期之后,结束日期在新行的结束日期之前的行(期间完全在您的期间内)
  • 开始日期在新行的开始日期之前,结束日期在新行的结束日期之后的一行(期间完全围绕您的期间)

可能还有其他可能性,但该组似乎是正确的。

假设第二个表中的行已经不重叠,您可以相对轻松地查询重叠行,然后您可以计算要使用的新日期组并更新您的第二个表。为计算编写大量单元测试。

请注意,这将是一个并发雷区(取决于您在其中执行此操作的应用程序类型)。如果两个用户可以同时提交一个新行,那么您将需要某种方法来确保读取、计算和更新是一个原子操作,否则您的第二个表将很快变得不一致。


推荐阅读