Leetcode 706. 设计哈希映射

news/2024/11/19 19:45:19/文章来源:https://www.cnblogs.com/geek0070/p/18433137

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=999self.data=[[] for _ in range(self.base)]def hash(self,key:int):return key%self.basedef put(self, key: int, value: int) -> None:hashVal=self.hash(key)for item in self.data[hashVal]:if item[0]==key:item[1]=valuereturnself.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 -1def 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.执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/803960.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

易基因:eLife:早期中度产前酒精暴露(PAE)和母体饮食介导子代DNA甲基化变化 | WGBS研究

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 妊娠期间饮酒是导致儿童神经发育障碍的主要原因之一,高剂量饮酒可导致儿童出现认知、行为和神经发育障碍,但目前对于低至中等饮酒水平的影响尚不完全清楚。DNA甲基化是一种表观遗传机制,涉及在碳-1代谢过程…

实战教程!Zabbix 监控 Spark 中间件配置教程

本文将介绍以JMX方式监控Spark中间件。JMX具有跨平台、灵活性强、监控能力强、易于集成与扩展、图形化界面支持以及安全性与可配置性等多方面的优势,是监控Spark等复杂Java应用程序的重要工具之一。 Apache Spark 是一个开源的大数据处理框架,它提供了快速、通用和可扩展的数…

Linux单机最大并发到底是多少?

Linux单机最大并发到底是多少? - 知乎 (zhihu.com) 所谓C10K就是单机1w并发问题,其中IO复用epoll/kqueue/iocp等技术对于C10k问题的解决起到了非常重要的作用。 所谓C10W就是单机1000w并发问题,未来待解决 ========================================== 五元组数 一个五元组可…

PyG的安装

PyG的安装 很早就想了解一下图神经网络,终于有时间学习一下了,下面记录一下安装 PyG 的过程。 PyG GitHub官网地址:GitHub - pyg-team/pytorch_geometric: Graph Neural Network Library for PyTorch 这个官网我觉得很好的一点是他一直在更新,而且基本上所有的图神经网络模…

中通面经

中通面经 1、Springboot的启动流程是怎么样的?new SpringApplication(): 在SpringApplication的构造函数中,调用了一个initialize方法,所以他的初始化逻辑直接看这个initialize方法就行了。1、添加源:将提供的源(通常是配置类)添加到应用的源列表中 2、设置web环境:判断…

助力降本增效,ByteHouse打造新一代云原生数据仓库

随着数据量的爆炸式增长、企业上云速度加快以及数据实时性需求加强,云原生数仓市场迎来了快速发展机遇。据 IDC、Gartner研究机构数据显示,到 2025 年,企业 50% 数据预计为云存储,75% 数据库都将运行在云上,全球数据处理预计有 30% 为实时数据处理,80% 数据预计为非结构化…

.NET 工具库高效生成 PDF 文档

前言 QuestPDF 是一个开源 .NET 库,用于生成 PDF 文档。使用了C# Fluent API方式可简化开发、减少错误并提高工作效率。利用它可以轻松生成 PDF 报告、发票、导出文件等。 项目介绍 QuestPDF 是一个革命性的开源 .NET 库,它彻底改变了我们生成 PDF 文档的方式。 QuestPDF 的核…

【数据库】生产问题(数据迁移)

MySQL 亿级数据平滑迁移实战(来自vivo) https://www.cnblogs.com/vivotech/p/183736231、方案选型 常见的迁移方案大致可以分为以下几类:而预约业务有以下特点:读写场景多,频率高,在用户预约/取消预约/福利发放等场景均涉及到大量的读写。 不可接受停机,停机不可避免的会…

Git 分支管理全攻略:一篇博客带你玩转代码分支!

什么是分支?在 Git 里,分支其实就有点像一个树的枝杈,每个分支上可以有不同的文件的版本,并且不会互相干扰。什么是分支?在 Git 里,分支其实就有点像一个树的枝杈,每个分支上可以有不同的文件的版本,并且不会互相干扰。 ​ 分支功能有什么用?在工作中,我们经常是需要…

关于python自动化测试

最近在家搭建了一套可以复用的自动化测试框架,本项目实现接口自动化的技术选型:Python+Requests+Pytest+YAML+Allure 通过 Python+Requests 来发送和处理HTTP协议的请求接口,使用 Pytest 作为测试执行器,使用 YAML 来管理测试数据,使用 Allure 来生成测试报告

加油站智能视频分析盒

加油站智能视频分析盒通过深度学习视频分析技术,加油站智能视频分析盒代替人眼,7*24小时不间断实时对加油站现场人员行为及设备进行识别站。加油站智能视频分析盒不同于传统安防监管方式,加油站智能视频分析盒可以全年24小时不停歇的对现场人员不合规行为并进行一直持续不断…

【C++】C++提高编程

C++提高编程 本阶段主要针对C++泛型编程和STL技术做详细讲解,探讨C++更深层的使用 1. 模板 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 模板的特点:模板不可以直接使用,只是一个框架 模板的通用并不是万能的1.2 函数模板C++另一种编程思想称为泛型编程,主要利…