Algorithm 维护实时计数器

Algorithm 维护实时计数器,algorithm,data-structures,Algorithm,Data Structures,下面是一个面试问题,它会出现并且: 给定一个纳秒精度的计时器时间()和给定的接口 interface RealTimeCounter: void increment() int getCountInLastSecond() int getCountInLastMinute() int getCountInLastHour() int getCountInLastDay() getCountInLastX函数应返回上一个X中调用增量的次数 这里有一个建议

下面是一个面试问题,它会出现并且:

给定一个纳秒精度的计时器时间()和给定的接口

interface RealTimeCounter:
    void increment()
    int getCountInLastSecond()
    int getCountInLastMinute()
    int getCountInLastHour()
    int getCountInLastDay()
getCountInLastX
函数应返回上一个X中调用增量的次数


这里有一个建议的解决方案(从上面的博客条目中转述):

维护时间戳的ArrayList。当询问给定的计数器时,比如最后一秒的计数,执行二进制搜索(timer.time()-1秒,单位为纳秒),然后返回list.length()-list\u索引。然后,作为一个定期的背景过程,我们修剪数据。因为我们只需要维护最后一天的数据,所以我们可以删除最后一天之前的所有条目


请评论此解决方案或提供性能更好的解决方案。

您意识到,使用32位带符号整数,总共只能激活2.1474836475秒?@leppie-我认为计数器不是每纳秒激活一次,但激活频率要低得多。否则,为什么要有一个计数器呢?@leppie太好了,这可能是你的解决方案的一部分。如何维护“无限”计数器。在Java中,可以使用BigInteger。或者这里讨论的无限二进制计数器:。或者是一个简单的链表,它在达到阈值后会增长:(因为无限计数器的问题在这些链接中讨论得很好,所以成为StackOverflow问题的焦点可能不那么有趣)我只是想知道。它很可能在256位平台上运行。