数据结构模糊

时间:2011-05-02 12:32:37

标签: algorithm complexity-theory

我无法想象这个面试问题。

你有一个整数数组。您需要提供另一个具有以下功能的数据结构:

int get(int index)
void set (int index, int value)
void setall(int value)

他们都做你猜他们想做的事情。 限制是每个函数都在O(1)中。

如何设计它以便setAll为O(1)。

我考虑过为每个整数添加另一个字段,这将指向每次调用setAll时都会更改的整数。当有人调用 setAll 然后设置然后获取时,问题就出现了。

编辑:我更改了变量的名称,以便更清楚。另外,既然你问,get假设返回array [i],设置(index,value)假设把值值放在数组[index]中。

setall(index, value)之后,对于阵列中的每个i,j都应get (get(i) == get(j) == value)

2 个答案:

答案 0 :(得分:31)

如何为每个变量存储“版本号”,即

 int globalValue, globalVersion;
 int nextVersion;
 int[] localValue, localVersion;

 int get(int i) {
     if (localVersion[i] > globalVersion)
         return localValue[i];
     else
         return globalValue;
 }


 void set(int i, int value) {
     localValue[i] = value;
     localVersion[i] = nextVersion++;
 }

 void setAll(int value) {
     globalValue = value;
     globalVersion = nextVersion++;
 }

答案 1 :(得分:11)

使用数组中的每个元素,setAllValue变量和setAllDateTime变量保留DateTime字段(或简称为计数器)。使用每个集合,更新元素的DateTime / counter。使用SetAll,更新setAllDateTime的值和DateTime。

在get中,将SetAll的DateTime与元素的DateTime进行比较,以较新者为准,返回该值。