[leetcode] 706. Design HashMap

本文介绍了一种不依赖内置哈希表库的设计方法,通过选择质数作为模数创建哈希表。在Python中,利用列表存储键值对,实现了put、get和remove操作。put方法用于插入或更新键值对,get方法查找键对应的值,返回-1表示键不存在,remove方法删除指定键的键值对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

Design a HashMap without using any built-in hash table libraries.

To be specific, your design should include these functions:

  • put(key, value) : Insert a (key, value) pair into the HashMap. If the value already exists in the HashMap, update the value.
  • get(key): Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key.
  • remove(key) : Remove the mapping for the value key if this map contains the mapping for the key.

Example:

MyHashMap hashMap = new MyHashMap();
hashMap.put(1, 1);          
hashMap.put(2, 2);         
hashMap.get(1);            // returns 1
hashMap.get(3);            // returns -1 (not found)
hashMap.put(2, 1);          // update the existing value
hashMap.get(2);            // returns 1 
hashMap.remove(2);          // remove the mapping for 2
hashMap.get(2);            // returns -1 (not found) 

Note:

  • All keys and values will be in the range of [0, 1000000].
  • The number of operations will be in the range of [1, 10000].
  • Please do not use the built-in HashMap library.

分析

题目的意思是:实现散列表法。这道题我参考了一下别人的python实现,首先设置一个质数prime,作为哈希的取模的数,hash数组存放取模后的键值对。put的时候做哈希,存放数据;get的时候也是做哈希,取值;remove的时候,先根据key找到目标键值对,最后删除该键值对就行了。

代码

class MyHashMap:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.prime=20011
        self.hash=[[] for _ in range(self.prime)]
        

    def put(self, key: int, value: int) -> None:
        """
        value will always be non-negative.
        """
        t=key%self.prime
        for item in self.hash[t]:
            if(item[0]==key):
                item[1]=value
                return 
        self.hash[t].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
        """
        t=key%self.prime
        for item in self.hash[t]:
            if(item[0]==key):
                return item[1]
        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
        """
        t=key%self.prime
        delete=[]
        for item in self.hash[t]:
            if(item[0]==key):
                delete=item
        if(delete):
            self.hash[t].remove(delete)
                

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

参考文献

Python3 详细题解,拉链法实现!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

农民小飞侠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值