我有一系列的日期可以追溯到多年,然而,它们不是连续的,这意味着在某些星期有7个日期,在其他几周有3个日期,在某些极端情况下只有一个日期那个星期。
我需要识别并标记有可用日期的每周的开始和结束日期。例如,从2015-06-23
开始记录2015-06-24
,2015-06-25
,2015-06-27
和2015-06-22 (Mon)
这一周,2015-06-23
和{{1}应分别是该周的开始和结束。如果某一周只记录了一个日期,那么该日期应该同时是该周的开始和结束。
将相同的概念延伸到几个月,我需要识别并标记任何给定月份记录的开始和结束日期,无论给定月份有多少日期。
同样,这同样适用于可以定制四季(就开始和结束月份而言)定义的季节。也就是说,我可以将四季定义为:春季(3月 - 5月),夏季(6月 - 8月),秋季(9月 - 11月),冬季(12月 - 2月),或者我可能会将月份改为使用一些不同的定义。事实上,我们可能完全抛弃传统的季节概念,并且每个连续三个月定义四个连续的时期。鉴于这样的定义,我需要确定每个特定时期/季节的开始和结束日期。
什么是实现上述所有目标的节省时间的算法?
答案 0 :(得分:1)
它是Element Distinctness Problem的变体,您需要在其中找到每个" distinct"的两个特定实例。元件。
(可以通过为i / epsilon
元素添加i
时间来减少元素清晰度,然后找出是否有一个星期有多个日期。
元素清晰度通常通过两种方式之一解决,也可以在这里应用:
O(1)
),最后 - 迭代地图并为每个日期 - 输出最小和最大日期与本周相关的清单。请注意,如果您正在寻找可扩展的解决方案,第二种方法可以很容易地转换为map-reduce。