我想不出这个面试问题。
你有一个整数数组。您需要提供另一个具有以下功能的数据结构:
int get(int index)
void set (int index, int value)
void setall(int value)
他们都做你想做的事。
限制是每个函数都在o(1)中。
如何设计它,使setall为o(1)。
我考虑在每个整数中添加另一个字段,该字段将指向一个整数,该整数将在每次调用setall时更改。当有人打电话给setall然后set然后get时,问题就来了。
编辑:我更改了变量的名称,这样就更清楚了。另外,既然您问了,get假设返回array[i],set(index,value)假设将值放入array[index]。
在
setall(index, value)
之后,数组中的每个i,j都应该get (get(i) == get(j) == value)
。 最佳答案
使用数组中的每个元素、setAllValue变量和setAllDateTime变量保留一个DateTime字段(或者简单地说是一个计数器)。对于每个集合,更新元素的datetime/计数器。使用setall更新setall datetime的值和datetime。
在get中,比较setall的datetime和元素的datetime,以较新者为准,返回该值。