我们有N
个整数计数器,最初显示为0.操作:
int getMax()
- 返回计数器显示的最高值
void increment(int i)
- 增加计数器i
的值
void zero()
- 为所有计数器设置零值。替代名称为flood()
,也许此名称对您有所帮助。
目前实现这些操作和底层数据结构,知道我们希望这些操作尽可能快。
这是我的面试问题。由于我的记忆力不足,我说出一些错误的可能性很小,但我尽力了。也许它类似于一些众所周知的问题? (我希望。)
据我记忆,所有的操作都可以在O(1)中完成......其中一个操作是“懒惰的”(也许是increment
)...即在一个通话时刻它什么都不做,但后来当用户用getMax()
询问价值时 - 它起作用了。
答案 0 :(得分:8)
这可以通过简单的大小为N的数组来完成,其中每个元素由2个数字组成 - 当前值和版本(例如,时间戳)。而且您还需要全局最后重置(零)版本和全局最大值。
增加:
获得最大值:
要重置:
所有操作:O(1)。