【题目】
哈希表常见的三个操作是put、get和containsKey,而且这三个操作的时间复杂度为O(1)。现在想加一个setAll功能,就是把所有的记录的value值都设成统一的值。请设计并实现这种有setAll功能的哈希表,并且put、get、containsKey和setAll四个操作的时间复杂度都为O(1)。
【基本思路】
加入时间戳。
1、把每一个记录都加上一个时间,标记每条记录是合适建立的
2、设置一个setAll记录也加上一个时间,标记setAll记录何时建立
3、查询记录时,如果某条记录的时间早于setAll记录的时间,说明setAll是最新数据,返回setAll记录的值。如果某条记录的时间晚于setAll记录的时间,说明记录的值是最新数据,返回该条记录的值
【代码实现】
#python3.5
class MyValue:
def __init__(self, value, time):
self.__value = value
self.__time = time
def getValue(self):
return self.__value
def getTime(self):
return self.__time
class MyHashMap:
def __init__(self):
self.map = {}
self.time = 0
self.setAll = MyValue(None, -1)
def containsKey(self, key):
return key in self.map
def put(self, key, value):
self.map[key] = MyValue(value, self.time)
self.time += 1
def setAll_(self, value):
self.setAll = MyValue(value, self.time)
self.time += 1
def get(self, key):
if self.containsKey(key):
if self.map[key].getTime() < self.setAll.getTime():
return self.setAll.getValue()
else:
return self.map[key].getValue()
else:
return None