emt*_*t14 7 language-agnostic algorithm recursion functional-programming
我试图找出正确的算法来计算一组日期范围时遇到问题.
基本上我有一个无序日期范围列表(列表包含开始和结束时间的数组),我想合并这个列表,因此它不包含重叠时间.
主要是为了巩固两个日期范围:
if start1 <= end2 and start2 <= end1 //Indicates overlap
if start2 < start1 //put the smallest time in start1
start1 = start2
endif
if end2 > end1 //put the highest time in end1
end1 = end2
endif
endif
Run Code Online (Sandbox Code Playgroud)
这加入了两个日期时间.
在迭代所有值时,我遇到了绊脚石,因此结束列表只包含不重叠的值.
我的功能和递归编程有点生疏,欢迎任何帮助.
n. *_* m. 15
不要看间隔,只看他们的目的.
你有一堆开始时刻和一堆结束时刻.想象一下,起始时刻是红色,结束时刻是蓝色.或者想象一下,开始时刻是打开括号,结束时刻是关闭括号.
将它们放在一个列表中.将列表从最早到最晚排序,忽略颜色.
现在将一个计数器设置为零,然后沿着列表向下走.当你看到红色时刻时,递增计数器.当你看到一个蓝色的时刻,减少计数器.当计数器值从0变为1时,输出"start"和当前时间.当计数器值从1变为0时,输出"结束"和当前时间.如果计数器值低于0,则输出"休斯顿,我们遇到问题".你应该用你的计数器结束0和一堆很好的非重叠间隔.
这是一个很好的旧支撑计数算法.
插图.
A bunch of overlapping intervals:
(-------------------)
(----------------------)
(---)
(---------------------)
(-----------------)
A bunch of interval ends:
(-----(-------------)-(-----)----------------) (----(---)--------)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2883 次 |
最近记录: |