顺序组织/插入日期的算法

时间:2019-04-08 03:07:30

标签: java algorithm sorting date

我需要构建一种算法,该算法可以查看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

不应修改原始表,即不得在该原始表中重新插入/重新排列记录。

关于实现这一目标的最有效方法的任何技巧?不寻找特定于数据库的解决方案。 谢谢!

1 个答案:

答案 0 :(得分:0)

首先确定日期可以重叠的方式。在我看来,时间可能重叠的方式是:

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

也许还有其他可能性,但该小组似乎是对的。

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

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