我想创建这样的类:
public TrackMaxMin(int periodInSec)
// use current system time as time
public Add(decimal value)
// return maximum Value for the last periodInSec
public Max { get {} }
// return minimum Value for the last periodInSec
public Min { get {} }
我想我可以使用FIFO查询存储Pair<DateTime, decimal
&gt;我应该在Add
每次{{1}}来电:
我的解决方案非常简单明了。你可以提出更好的建议吗?
答案 0 :(得分:2)
您可以使用名为max-heap
的{{1}},名为max
的{{1}}和名为min-heap
的{{1}}。
让min
成为包含queue
和q
属性的元素。
调用x
时:
x.time
新元素x.val
。Add
Create
到所有数据结构。 x
的运行时间为Add
。
调用x
时:
Add
O(lgn)
的运行时间为Max
。
调用max.GetMax()
时:
Max
O(1)
的运行时间为Min
。
为了维护模型,请执行以下操作:
每次min.GetMin()
中下一个罢工元素的句号到期时,只有一个计时器被触发。
当Min
的期限到期时:
O(1)
,q
,x
答案 1 :(得分:1)
您可以将每对存储在队列中。您应该保持数据至少一分钟,然后在调用Add时删除过时数据。
但是,您应该通过循环堆栈数据来动态计算最大值和最小值,否则您将丢失数据完整性。
答案 2 :(得分:0)
这很方便,
System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch();
s.Start();
s.Stop();
long elapsedms = s.ElapsedMilliseconds;