力扣706-设计哈希映射

原题 :https://leetcode-cn.com/problems/design-hashmap/

不使用任何内建的哈希表库设计一个哈希映射(HashMap)。

实现 MyHashMap 类:

  MyHashMap() 用空映射初始化对象 void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。

  如果 key 已经存在于映射中,则更新其对应的值 value 。 int get(int key) 返回特定的 key 所映射的 value ;

  如果映射中不包含 key 的映射,返回 -1 。 void remove(key) 如果映射中存在 key 的映射,则移除 key 和它所对应的 value 。

 

个人理解

  对于哈希表,在数据结构可以用一个数组加链表的组合,数组为了可以对数据分组,

  可以加快查询速度,对于在同一个组内的数据进行遍历就可以找到数据的了

class MyHashMap:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.buckets = 1009
        self.table = [ [] for _ in range(self.buckets) ]

    def hash(self,key):
        return key % self.buckets        


    def put(self, key: int, value: int) -> None:
        """
        value will always be non-negative.
        """
        hashkey = self.hash(key)
        for item in  self.table[hashkey]:
            if item[0] == key:
                item[1] = value
                return
        self.table[hashkey].append([key,value])

   


    def get(self, key: int) -> int:
        """
        Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key
        """
        hashkey = self.hash(key)
        for item in self.table[hashkey]:
            if item[0] == key:
                return item[1]
        return -1

    def remove(self, key: int) -> None:
        hashkey = self.hash(key)
        for i, item in enumerate(self.table[hashkey]):
            if item[0] == key:
                self.table[hashkey].pop(i)
                return

 

posted @ 2021-03-14 20:32  睡觉了嘛  阅读(73)  评论(0编辑  收藏  举报