【20190514】【每天一道算法题】设计哈希映射(哈希表)

问题

设计一个哈希映射,不使用任何内建的哈希表库。具体地说,你的设计应该包含以下的功能:

1. put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。

2. get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。

3. remove(key):如果映射中存在这个键,删除这个数值对。

示例:

MyHashMap hashMap = new MyHashMap();
hashMap.put(1, 1);          
hashMap.put(2, 2);         
hashMap.get(1);            // 返回 1
hashMap.get(3);            // 返回 -1 (未找到)
hashMap.put(2, 1);         // 更新已有的值
hashMap.get(2);            // 返回 1 
hashMap.remove(2);         // 删除键为2的数据
hashMap.get(2);            // 返回 -1 (未找到) 

注意:

  • 所有的值都在 [1, 1000000]的范围内。
  • 操作的总数目在[1, 10000]范围内。
  • 不要使用内建的哈希库。

思路及代码

# Just follow the above steps!WRITE CODE STEP BY STEP.
class MyHashMap:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        # 建立空字典用{}或dict()
        self.hash = {} 
        # self.hash = dict()

    def put(self, key: int, value: int) -> None:
        """
        value will always be non-negative.
        """
        self.hash[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
        """
        if key in self.hash.keys(): return self.hash[key]
        else: return -1

    def remove(self, key: int) -> None:
        """
        Removes the mapping of the specified value key if this map contains a mapping for the key
        """
        self.hash.pop(key, 'Existence error!')   # 可有可无的参数用[]括起来
        # hash.pop(key, [default]):key存在删除key值,如果不在(此时一定要设置default值,不然会报错),那么返回default值。


# Your MyHashMap object will be instantiated and called as such:
# obj = MyHashMap()
# obj.put(key,value)
# param_2 = obj.get(key)
# obj.remove(key)

知识点

1. 可选参数用 ‘[ ]’ 括起来。

2. .pop(key [,default]]) 中 'default' 一般可以省略,但如果 key 键不存在,那么 default 不能省略!(否则会报错)。

功能如下:若存在 key,那么删除该键值对;若不存在 key,那么返回 default 信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Satisfying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值