首页 > 其他分享 >Leetcode 706. 设计哈希映射

Leetcode 706. 设计哈希映射

时间:2024-09-26 11:34:25浏览次数:11  
标签:哈希 706 value self 链表 key data Leetcode

1.题目基本信息

1.1.题目描述

不使用任何内建的哈希表库设计一个哈希映射(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 。

1.2.题目地址

https://leetcode.cn/problems/design-hashmap/description

2.解题方法

2.1.解题思路

链地址法

2.2.解题步骤

第一步,定义哈希函数的取余的基数和存储数组表data。

第二步,定义哈希函数,本题采用的最简单的除余函数。

第三步,定义插入函数,首先求key的哈希值h,并找到data中h位置的链表,如果key已经在该链表中,则将value进行更新,否则将key、value加入到该链表中。

第四步,定义查找函数,首先求key的哈希值h,并找到data中h位置的链表,如果key已经在该链表中,则返回对应的值,如果不存在,则返回-1。

第五步,定义删除函数,首先求key的哈希值h,并找到data中h位置的链表,如果key已经在该链表中,则删除对应项并返回。

3.解题代码

Python代码

# 链地址法
# 第一步,定义哈希函数的取余的基数和存储数组表data。第二步,定义哈希函数,本题采用的最简单的除余函数。第三步,定义插入函数,首先求key的哈希值h,并找到data中h位置的链表,如果key已经在该链表中,则将value进行更新,否则将key、value加入到该链表中。第四步,定义查找函数,首先求key的哈希值h,并找到data中h位置的链表,如果key已经在该链表中,则返回对应的值,如果不存在,则返回-1。第五步,定义删除函数,首先求key的哈希值h,并找到data中h位置的链表,如果key已经在该链表中,则删除对应项并返回。
class MyHashMap:
    def __init__(self):
        self.base=999
        self.data=[[] for _ in range(self.base)]
    
    def hash(self,key:int):
        return key%self.base

    def put(self, key: int, value: int) -> None:
        hashVal=self.hash(key)
        for item in self.data[hashVal]:
            if item[0]==key:
                item[1]=value
                return
        self.data[hashVal].append([key,value])

    def get(self, key: int) -> int:
        hashVal=self.hash(key)
        for item in self.data[hashVal]:
            if item[0]==key:
                return item[1]
        return -1

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

4.执行结果

在这里插入图片描述

标签:哈希,706,value,self,链表,key,data,Leetcode
From: https://www.cnblogs.com/geek0070/p/18433137

相关文章

  • 【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“
    【算法题】63.不同路径II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“1.题目下方是力扣官方题目的地址63.不同路径II一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格......
  • 【LeetCode Hot 100】19. 删除链表的倒数第N个结点
    题目描述由于单向链表只能从头往后遍历,所以无法向数组那样的随机存取结构一样进行下标运算,也无法从链表尾向前数n个结点。本题有两个思路,个人觉得都比较简单。可以先遍历一遍链表得到链表的长度len,然后再从头往后数len-n个结点就是所求结点。可以使用快慢指针,快指针先移动n......
  • [redis命令]哈希命令
    命令表命令含义HSET用于设置存储在key中的哈希表字段的值HGET获取存储在哈希表中指定字段的值HGETALL获取在哈希表中指定key的所有字段和值HKEYS获取存储在key中的哈希表的所有字段HVALS用于获取哈希表中的所有值HLEN获取存储在key中的哈希表的字段数量HEXISTS用于......
  • Leetcode 626-换座位题目解析
    1.题目编写解决方案来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。按 id 升序 返回结果表。 2.数据准备CreatetableIfNotExistsSeat(idint,studentvarchar(255));TruncatetableSeat;insertintoSeat(id,student)v......
  • [Python手撕]实现哈希映射
    classNode:def__init__(self,key,value,next=None):self.key=keyself.value=valueself.next=nextclassMyHashMap:def__init__(self):self.array=[None]*(10**3)defput(self,key:int,value:int)->......
  • Leetcode 1472. 设计浏览器历史记录
    1.题目基本信息1.1.题目描述你有一个只支持单个标签页的浏览器,最开始你浏览的网页是homepage,你可以访问其他的网站url,也可以在浏览历史中后退steps步或前进steps步。请你实现BrowserHistory类:BrowserHistory(stringhomepage),用homepage初始化浏览器类。void......
  • Leetcode 1396. 设计地铁系统
    1.题目基本信息1.1.题目描述地铁系统跟踪不同车站之间的乘客出行时间,并使用这一数据来计算从一站到另一站的平均时间。实现UndergroundSystem类:voidcheckIn(intid,stringstationName,intt)通行卡ID等于id的乘客,在时间t,从stationName站进入乘客一次只......
  • 计算机低能儿从0刷leetcode | 17.电话号码的数字组合 | 回溯思想
    题目:17.电话号码的字母组合解答:看题解学习到这种思想叫做回溯法,学习了一下,这是建立在DFS的基础上搜索思路,还分为递归式回溯以及非递归式回溯,这道题使用的是递归回溯。递归回溯的大致框架如下:voidDFS(inti){//搜索第i层   if(i>n){//搜索结束       ......
  • leetcode 2207. 字符串中最多数目的子序列
    3/100天刷题记录字符串中最多数目的子序列](https://leetcode.cn/problems/maximize-number-of-subsequences-in-a-string/)给你一个下标从0开始的字符串text和另一个下标从0开始且长度为2的字符串pattern,两者都只包含小写英文字母。你可以在text中任意位置......
  • 【算法题】20. 有效的括号-力扣(LeetCode)
    【算法题】20.有效的括号-力扣(LeetCode)1.题目下方是力扣官方题目的地址20.有效的括号给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对......