统一设置值的哈希表

setAll哈希表

哈希表统一设置值

【题目】
哈希表putgetcontainsKey三个操作的时间复杂度为O(1)。
现添加setAll操作:将所有记录的value都设成统一的值,并要求时间复杂度为O(1)


算法思路

将每个值立即设置为统一值,必须需要遍历整个哈希表,为时间复杂度为O(N),
而题目要求setAll操作时间复杂度为O(1)。
因此想到使用时间戳,每次统一设置的值为常数,只需在get操作时比较存储在哈希表中值的时间和setAll操作的时间,即可得知逻辑上获取的值(靠近后面时间的值为真实值)。
本质上为延迟操作,将setAll操作的设置值时间分散到get操作的比较时间中。因此存储在哈希表中的数据与真实数据存在不一致(有可能是setAll中的值)。

相应代码

# 给存储的value和setAll操作加上时间戳,比较时间判断之前的存储的value是否受到setAll操作影响
# 通过延迟操作,将setAll操作的时间分散到get的时间判断中
class MyValue():
    def __init__(self, value, time):
        self.value = value
        self.time = time

    def get_value(self):
        return self.value

    def get_time(self):
        return self.time

class MyHashMap():
    def __init__(self):
        self.map = {}
        self.time = 0
        self.set_all = MyValue(-1, self.time)

    def put(self, key, value):
        self.time += 1
        self.map[key] = MyValue(value, self.time)

    def get(self, key):
        self.time += 1
        if self.map[key].get_time() < self.set_all.get_time():
            return self.set_all.get_value()
        else:
            return self.map[key].get_value()

    def containsKey(self, key):
        self.time += 1
        return key in self.map

    def setAll(self, value):
        self.time += 1
        self.set_all = MyValue(self.time, value)

有任何疑问和建议,欢迎在评论区留言和指正!

感谢您所花费的时间与精力!

发布了57 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/the_harder_to_love/article/details/104200843