【问题标题】:Missing Date Ranges缺少日期范围
【发布时间】:2025-12-27 21:45:10
【问题描述】:
在给定日期范围集合的情况下,我需要从一年中的其余时间中找出所有缺失的日期范围。所有日期范围都在同一年内。并且日期范围之间没有重叠。
例如:[(1/31/2011 - 5/1/2011), (6/5/2011 - 12/1/2011)] 在收藏中可用
那么缺失的日期范围是 [(1/1/2011 - 1/30/2011) , (5/2/2011 - 6/4/2011) ,(12/2/2011-12/31/2011)]
解决这个问题的有效方法是什么?
【问题讨论】:
标签:
java
algorithm
date-range
【解决方案1】:
如果没有重叠并且所有范围都在同一年,您可以按开始时间升序对范围进行排序。然后,缺失的范围介于 1 月 1 日和第一个开始日期之间,介于所有范围之间,以及从最后一个范围的末尾到 12 月 31 日之间。您需要确保过滤掉可能出现的空范围(例如,如果一个范围在下一个范围开始时立即结束)。
该算法需要 O(n log n) 时间来对范围进行排序,然后需要 O(n) 时间来找到缺失的范围。或者,如果您想实现自己的排序功能,您可以使用桶排序或基数排序在 O(n) 时间内对范围进行排序,因为可能日期的范围很小且有限。第一个版本更容易实现,运行时间为 O(n log n),第二个版本为 O(n)。
希望这会有所帮助!