Leetcode 706. 设计哈希映射

news2024/9/29 13:22:51

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.执行结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年9月下旬AITOP100平台活动专区更新了7场AI大赛活动,奖金池59.4万元

亲爱的创新者们,AITOP100平台的活动专区在9月下旬已更新7场AI大赛活动。 本期为您精选了7场综合性的AI大赛,涵盖了AI绘画、AI视频、AI音乐和应用类领域,其中6场大赛均设有丰厚的现金奖励。这些赛事均由知名大平台或政府单位主办,…

Java: String类

一 String类 在 Java SE 中,String 类是用于处理字符串的一个非常重要的类。字符串在 Java 中是不可变的(immutable),意味着一旦创建,字符串的内容就不能被修改。所有对字符串的操作实际上都是创建了一个新的字符串对…

提升效率,C4D云渲染教程来了

因为C4D主要搭配的渲染器OCtane和Redshift都是GPU渲染器,阿诺德渲染器也可能直接用GPU渲染,所以大部分C4D渲染农场都支持用RTX2080、3090、4090系列显卡云渲染,云渲染追求速度,分机渲染任务,比如分100台机器渲染一个相…

【算法】二叉树中的 DFS

【ps】本篇有 6 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)计算布尔二叉树的值 .1- 题目解析 .2- 代码编写 2)求根节点到叶节点数字之和 .1- 题目解析 .2- 代码编写 3)二叉树剪枝 .1- 题目解析 .2- 代码编写 4&#x…

手机浏览器如何切换IP‌?多种方法任你选

在数字化时代,手机已成为我们日常生活中不可或缺的一部分,而手机浏览器则是我们访问互联网的重要工具。然而,有时出于隐私保护、访问限制规避或其他需求,我们可能需要切换手机浏览器的IP地址。本文将详细介绍多种在手机上切换浏览…

主流数据库与最佳备份工具选择

文章目录 前言选择备份工具的考虑因素1、数据库兼容性:2、备份性能:3、恢复能力:4、备份策略与灵活性:5、数据安全性: 主流数据库概述1、Oracle2、PostgreSQL3、Microsoft SQL Server4、MongoDB 备份工具推荐1、Oracle…

C++手动实现栈、和队列

栈的实现 头文件 #ifndef MY_STACK_H #define MY_STACK_H #include <iostream>using namespace std;class my_stack { private:int *base;//动态栈指针int top;//栈顶元素int size;//栈大小 public:my_stack();//无参构造my_stack(int size):top(-1),size(size){base …

机器学习——Bagging

Bagging&#xff1a; 方法&#xff1a;集成n个base learner模型&#xff0c;每个模型都对原始数据集进行有放回的随机采样获得随机数据集&#xff0c;然后并行训练。 回归问题&#xff1a;n个base模型进行预测&#xff0c;将得到的预测值取平均得到最终结果。 分类问题&#xf…

每日 GitHub 探索|构建强大 LLM 管道和优化 AI 聊天框架

探索 DSPy&#xff0c;一款用于优化 LLM 提示和权重的框架。了解 Anthropic Cookbook&#xff0c;该代码库提供使用 Anthropic 强大 AI 模型的可复制代码片段。此外&#xff0c;还有 LobeChat&#xff0c;一个开源、现代设计的 AI 聊天框架&#xff0c;支持多种 AI 供应商和功能…

AI大模型全套学习资料

前言 如果您也对AI大模型感兴趣想学习却苦于没有方向&#x1f440; 小编给自己收藏整理好的学习资料分享出来给大家&#x1f496; &#x1f449;获取方式&#xff1a; &#x1f61d;有需要的小伙伴&#xff0c;可以保存图片到wx扫描二v码关注免费领取【保证100%免费】&#x1…

C盘太满了 用这五个步骤彻底的清理C盘垃圾 真干净!

C盘太满了 用这五个步骤彻底的清理C盘垃圾 真干净&#xff01;C盘忽然满了&#xff0c;这个问题长期困扰着大家&#xff0c;因为太多的人不知道怎么去清理C盘了&#xff0c;毕竟C盘的结构确实是太复杂了&#xff0c;也不是一般人能够充分了解的&#xff0c;所以就间接的导致了大…

代码随想录算法训练营第55天 | 寻找存在的路径

寻找存在的路径 题目描述 给定一个包含 n 个节点的无向图中&#xff0c;节点编号从 1 到 n &#xff08;含 1 和 n &#xff09;。 你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。 输入描述 第一行包含两个正整数 N 和 M&#xff0c;N 代表节点…

openpnp - 为了防止物料操作混乱,做一张物料分布位置图清晰一些

文章目录 openpnp - 为了防止物料操作混乱&#xff0c;做一张物料分布位置图清晰一些概述笔记做子装配图做总装配图备注END openpnp - 为了防止物料操作混乱&#xff0c;做一张物料分布位置图清晰一些 概述 看网上资料&#xff0c;当openpnp贴片机上料后&#xff0c;为了防止…

海山数据库(He3DB)+AI(四):一种基于迁移学习的启发式数据库旋钮调优方法

文章目录 0 前言1 OpAdviser1.1 主要工作1.2 总体流程 2 确定搜索空间2.1 相似任务识别2.2 有效区域提取2.3 多数加权投票 3确定优化器3.1 元特征提取3.2 离线数据生成3.3 Meta-Ranker构建 4 参考文献 0 前言 在海山数据库(He3DB)AI&#xff08;三&#xff09;中&#xff0c;介…

华润置地基于Apache SeaTunnel构建统一数据集成框架

作者&#xff1a;田力、陈允德 编辑整理&#xff1a;曾辉 引言 随着数字化转型的深入&#xff0c;企业对数据集成与处理的需求不断提升&#xff0c;如何高效、灵活地处理多系统、多数据源的同步&#xff0c;成为企业数据系统建设中的关键挑战。 在这篇文章中&#xff0c;来自…

display:flex;和margin的妙用

想要实现这样的效果&#xff1a; 第一个想法就是使用display:flex;justify-content: space-between; 所以想要得到效果&#xff0c;一般来说还需要在盒子外面再套一层盒子才行&#xff0c;但是也可以使用margin来实现。 <!DOCTYPE html> <html lang"en"&g…

makefile和CMakeLists/C++包管理器

make 大家可能会很奇怪&#xff0c;都什么年代了&#xff0c;还学makefile&#xff0c;cmake都有些过时了&#xff0c;为什么还要再学这个呢&#xff1f; 我是这么看待这个问题的&#xff0c;cmake跨平台性还是很有有优势的&#xff0c;有着多年积累的底蕴&#xff0c;借助大模…

c++反汇编逆向还原——do while循环(笔记)

c反汇编逆向还原代码do while循环的实现 涉及到的汇编指令mov、lea、cmp、jle、push 一、汇编 汇编代码 涉及到的指令 mov &#xff1a;将源操作数复制到目的操作数 lea &#xff1a;与mov类似 mov a&#xff0c;b 表示将b赋值给a 若是 mov a&#xff0c;[b] 这是将b的…

OpenAI首席技术官Mira Murati宣布她将离开公司

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

解决VsCode不显示环境名称

在VSCODE终端中激活运行的conda环境&#xff0c;但是只显示PS&#xff0c;并不显示环境名称 PS D:\Code\Pro\003_pro> 解决方法&#xff1a;以管理员权限打开PowerShell 方式1&#xff1a;在Cortana搜索栏中打开带管理员权限的PowerShell 在Windows 10的任务栏搜索框输入p…