我需要在给定日期范围的集合的情况下找到一年中其余时间的所有缺失日期范围。所有日期范围都在同一年内。并且日期范围之间没有重叠。
例如:[(2011年1月31日 - 5/1/2011),(6/5/2011 - 12/1/2011)]可在收藏中找到 那些缺少的日期范围是[(2011年1月1日 - 1/30/2011),(2011年5月2日 - 2011年6月4日),(12/2 / 2011-12 / 31/2011)] < / p>
解决这个问题的有效方法是什么?
答案 0 :(得分:1)
如果没有重叠且所有范围都是同一年,您可以按开始时间按升序对范围进行排序。然后,缺失范围介于1月1日和第一个开始日期之间,所有范围之间,以及从最后一个范围的结束到12月31日。您需要确保过滤掉可能出现的空范围(例如,如果一个范围在下一个范围开始时就结束了。)
该算法需要O(n log n)时间对范围进行排序,然后O(n)时间来查找缺失的范围。或者,如果要实现自己的排序功能,可以使用桶排序或基数排序在O(n)时间内对范围进行排序,因为可能的日期范围很小且有限。第一个版本更容易实现,并在O(n log n)时间内运行,第二个版本在O(n)中运行。
希望这有帮助!