【哈希-简单】706. 设计哈希映射(数组法+拉链法(定长拉链+不定长拉链))

速腾RS-LiDAR-16激光雷达ROS环境搭建与点云可视化实战指南 本文提供速腾RS-LiDAR-16激光雷达在ROS环境下的完整搭建与可视化实战指南。从硬件连接、网络配置、驱动安装编译,到核心参数详解与Rviz点云可视化,手把手解决IP设置、坐标系对齐等常见问题,帮助开发者快速实现激光雷达三维点云数据的采集与显示。 阅读详情

【题目】
不使用任何内建的哈希表库设计一个哈希映射(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 。
【示例】
输入:
[“MyHashMap”, “put”, “put”, “get”, “get”, “put”, “get”, “remove”, “get”]
[[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]]
输出:
[null, null, null, 1, -1, null, 1, null, -1]
解释:
MyHashMap myHashMap = new MyHashMap();
myHashMap.put(1, 1); // myHashMap 现在为 [[1,1]]
myHashMap.put(2, 2); // myHashMap 现在为 [[1,1], [2,2]]
myHashMap.get(1); // 返回 1 ,myHashMap 现在为 [[1,1], [2,2]]
myHashMap.get(3); // 返回 -1(未找到),myHashMap 现在为 [[1,1], [2,2]]
myHashMap.put(2, 1); // myHashMap 现在为 [[1,1], [2,1]](更新已有的值)
myHashMap.get(2); // 返回 1 ,myHashMap 现在为 [[1,1], [2,1]]
myHashMap.remove(2); // 删除键为 2 的数据,myHashMap 现在为 [[1,1]]
myHashMap.get(2); // 返回 -1(未找到),myHashMap 现在为 [[1,1]]
【提示】
0 <= key, value <= 106
最多调用 104 次 put、get 和 remove 方法
进阶:你能否不使用内置的 HashMap 库解决此问题?
【代码】
【Python】
在这里插入图片描述

class MyHashMap:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.myhashmap=[]
        

    def put(self, key: int, value: int) -> None:
        """
        value will always be non-negative.
        """
        flag=1
        for k in self.myhashmap:
            if key==k[0]:
                k[1]=value
                flag=0
        if flag:
            self.myhashmap.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
        """
        for k in self.myhashmap:
            if key==k[0]:
                return k[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
        """
        for index,k in enumerate(self.myhashmap):
            if k[0]==key:
                self.myhashmap.pop(index)


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

【方法2:时间换空间】
在这里插入图片描述

class MyHashMap:
    def __init__(self):
        self.myhashmap=[-1]*1000001

    def put(self, key: int, value: int) -> None:
        self.myhashmap[key]=value

    def get(self, key: int) -> int:
        return self.myhashmap[key]
        
    def remove(self, key: int) -> None:
        self.myhashmap[key]=-1

【定长拉链法】
在这里插入图片描述

class MyHashMap:
    def __init__(self):
        self.myhashmap=[[-1]*1000 for _ in range(1001)]
    def put(self, key: int, value: int) -> None:
        self.myhashmap[key//1000][key%1000]=value
    def get(self, key: int) -> int:
        return self.myhashmap[key//1000][key%1000]
    def remove(self, key: int) -> None:
        self.myhashmap[key//1000][key%1000]=-1

【不定长拉链法】
不定长的拉链数组是说拉链会根据分桶中的 key 动态增长,更类似于真正的链表。
分桶数一般取质数,这是因为经验上来说,质数个的分桶能让数据更加分散到各个桶中。下面的代码中把分桶数去了 1009,是因为 1009 是大于 1000 的第一个质数。
优点:节省内存,不用预知数据范围;
缺点:在链表中查找元素需要遍历。
在这里插入图片描述

class MyHashMap:

    def __init__(self):
        self.buckets = 1009
        self.table = [[] for _ in range(self.buckets)]

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

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

    def remove(self, key: int) -> None:
        hashkey = self.hash(key)
        for i, item in enumerate(self.table[hashkey]):
            if item[0] == key:
                self.table[hashkey].pop(i)
                return
STM32_DAC DAC(Digital-to-Analog Converter,数模转换器)是将数字信号转换为模拟信号的外设,广泛应用于音频输出、波形生成、电机控制等场景。STM32F407 系列芯片配备了 2 个 DAC 通道(DAC1 和 DAC2),支持 12 位分辨率,支持多种触发方式,可输出稳定的模拟电压。本文从 DAC 的基本原理出发,详细讲解 STM32F407 DAC 的配置方法、代码实现、波形生成以及实际应用案例,帮助你快速掌握 DAC 的使用技巧。 阅读详情

相关推荐

FPGA八股文(2)——笔试的FPGA问题汇总(持续更新)

常见FPGA笔试题的概念总结

居安士的博客 8912

Java实现 LeetCode 706 设计哈希映射(数组+链表)

706. 设计哈希映射 不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。 get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。 remove(key):如果映射中存在这个键,删除这个数值对。 示例: MyHashMap hashMap =...

南 墙 1万+

UOS系统手动添加1920x1080分辨率:xrandr命令详解与持久化配置

本文详细介绍了在UOS系统中使用xrandr命令手动添加1920x1080分辨率的方法。针对系统设置中缺失该选项的常见问题,文章提供了从识别显示设备、使用cvt生成模式、添加并切换分辨率,到通过修改.profile文件实现持久化配置的完整步骤。同时涵盖了虚拟机环境、设备名识别及排错等进阶内容,帮助用户彻底解决UOS分辨率配置难题。

weixin_29300931的博客 500

LeetCode 设计哈希映射 HERODING的LeetCode之路

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

HERODING23的博客 354

用STM32定时器PWM高级功能驱动步进电机:F103C8T6+TB6600实战教程

本文详细介绍了如何利用STM32F103C8T6微控制器的定时器PWM高级功能驱动TB6600步进电机驱动器,实现高效、灵活的运动控制方案。通过硬件配置、PWM参数计算、运动控制算法及TB6600高级功能应用的全面解析,为工业自动化和精密控制领域提供了实用的技术参考。

game4的博客 186

Transformers 中的 Softmax 可以并行加速么?

通过融合前两个计算步骤,降低执行Reduce_max和Reduce_sum等操作的通信开销。利用共享内存来存储临时数据,以减少对全局内存的访问成本。

stephen147的博客 1236

每日一题 LeetCode 706. 设计哈希映射 java题解

学个屁啊 无语子 题目 https://leetcode-cn.com/problems/design-hashmap/ 代码 用链表呗 class MyHashMap { private class Node{ int key; int value; public Node(int k,int v){ key=k; value=v; } public int get.

乾坤未定,你我皆是黑马 237

《惠普工作站设置BIOS从U盘装系统》

惠普工作站设置BIOS 惠普工作站在做服务器时应用广泛,本文介绍下其BIOS开机自启动设置,附上图片,以供学习参考。 惠普工作站设置BIOS 启动步骤如下: 第一步:根据需要对BIOS进行更改,并保存 1.重启工作站按F10进入BIOS设置(也可以按ESC键选择进入BIOS设置的选项)。 图1 惠普工作站B...

istrangeboy&begin zero的博客 2万+

【LeetCode】 706. (JAVA) 设计哈希集合 链表实现

总体来讲,这个效果不是很优秀,而且有问题,因为size要设置的很大就可以,设置小了就出错,还没来得及找出来原因,先贴出来吧 题目: 解决: 思路: 使用链表实现的哈希集合,其实总体来说把,这么做不太好,遍历会很麻烦,必须要从头到尾,这样就会导致时间复杂度一直都是n级别的 如果len设置的小就不通过,还没搞清楚原因 整体使用的还是内部的链表结构实现的 我封装了一个Node,用来保存每个key-...

GEEK-BANANA 500

ABAP动态填充Word模板:基于cl_docx_document的XML替换方案

本文详细介绍了ABAP中基于cl_docx_document类的动态Word模板填充方案。该方案通过直接操作DOCX文件的XML核心,完美解决了传统OLE/DOI方法在格式保真、性能和后台运行方面的痛点,是实现复杂、批量Word文档生成的优雅解决方案。

gpt4scribbler的博客 526

使用python对创芯科技CANalyst-II分析仪进行二次开发(详细教程)

使用python对创芯科技CANalyst-II分析仪进行二次开发

ningqingzy的博客 1万+

LeetCode|706.设计哈希映射

LeetCode习题答案汇总 题目: 不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。 get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。 remove(key):如果映射中存在这个键,删除这个数值对。 示例: MyHashMap hashMap = new MyHashMap(); hashMap.put(1, 1); hashMap.put(2

小黄的博客 363

YOLO26 多任务统一架构:检测 / 分割 / 姿态 / OBB 设计

YOLO26提出了一种多任务统一架构,整合了目标检测、实例分割、姿态估计和旋转框检测(OBB)四大计算机视觉任务。该架构采用共享Backbone和Neck的设计,配合轻量级任务特定Head,解决了传统方法中多模型并行带来的高开发成本、大内存占用和低推理效率问题。核心设计包括:1)共享特征提取层实现参数复用;2)模块化Head结构支持灵活任务组合;3)统一接口实现单模型多任务处理。实验表明,该架构在保持各任务性能的同时显著提升了系统效率,为多任务视觉系统提供了新的实现范式。

一键难忘的博客 708

LeetCode-706. 设计哈希映射【设计 数组 哈希表 链表 哈希函数】

/ 返回 -1(未找到),myHashMap 现在为 [[1,1], [2,2]]// myHashMap 现在为 [[1,1], [2,1]](更新已有的值)// 返回 1 ,myHashMap 现在为 [[1,1], [2,2]]// 返回 1 ,myHashMap 现在为 [[1,1], [2,1]]// 删除键为 2 的数据,myHashMap 现在为 [[1,1]]// myHashMap 现在为 [[1,1], [2,2]]// myHashMap 现在为 [[1,1]]

zik的博客 1151

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Leetcode 706.设计哈希映射

Leetcode 706.设计哈希映射 学习了这位大佬的,存着复习 大佬主页 HashMap是在时间和空间上做权衡的经典例子,不考虑空间,可以设计一个超大数组,使的每个元素都有单独的位置,不存在冲突,直接用一个无序的数组保存输入,每次查找的时候遍历一次数组。 考虑,设计合适的哈希函数,(采用除留余法); 冲突:拉链法和线性探测法; 超大数组 超大数组注解:将key值作为数组下标,value值存至数组下标key值对应处;由于范围是10^6所以,数组范围10e6+1每个数据都有单独的索引,不会出现冲突。 c

不是老哥的博客 462

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

哈希表(Hash table)

哈希表(Hash table)

yake1965 1882

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LeetCode 706. 设计哈希映射

不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。 get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。 remove(key):如果映射中存在这个键,删除这个数值对。 示例: MyHashMap hashMap = new My...

weixin_41514525的博客 170

706设计哈希映射

不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。 get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。 remove(key):如果映射中存在这个键,删除这个数值对。 示例: MyHashMap hashMap = new MyHashMap(); hashMap.put(1, 1); hashMap.put(2, 2); hashMap.get(1

weixin_53344209的博客 214

LeetCode 706. 设计哈希映射 (Hash 底层探究实现)

尽人力,敬天命 题目 不使用任何内建的哈希表库设计一个哈希映射(HashMap)。 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象 void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。 int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。 void remov.

QuantumYou的博客 370

705. 设计哈希集合 706. 设计哈希映射

两题的功能分别是实现unordered_set 和 unordered_map;由于包含删除操作所以采用拉链法设计 原题链接:706. 设计哈希映射 705. 设计哈希集合 solution: const int N = 20003; class MyHashSet { public: vector<int> h[N]; int find(vector<int> &h, int key) { ...

qq_42174306的博客 207

LeetCode 706. 设计哈希映射(数组法,稀疏矩阵法,链地址法,开放定址法)

思路: 参考:https://leetcode-cn.com/problems/design-hashmap/solution/706-she-ji-ha-xi-ying-she-by-jyj407-nzcz/ 解法1: 因为数据不大,直接用数组保存每个值的映射。 class MyHashMap { private: vector<int>cache; public: /** Initialize your data structure here. */ MyHashM.

tomjobs的博客 443

LeetCode 706:Design HashMap 实现一个简单的哈希映射

题目描述: 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...

Just do it ! 2106

哈希表hash

构造哈希函数 直接地址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法 冲突解决 开发地址法 再哈希法 拉链法 建立公共溢出区 设计哈希集合 705. 设计哈希集合 type MyHashSet struct { data []list.List } func Constructor() MyHashSet { return MyHashSet{data: make([]list.List, 911)} } func hash(key int) int { return key % 9

lishuangzhi的博客 387

March——706.设计hash映射

class MyHashMap: def __init__(self): """ Initialize your data structure here. """ #self.hashmap = dict() #self.hashmap = [-1]*1000001 self.map = [[-1] * 1000 for _ in range(1001)] def put(self...

奥古斯都 149

LeetCode - 706 设计哈希映射(设计) *

超大数组 class MyHashMap { private int[] map ; public MyHashMap() { map = new int[1000001]; Arrays.fill(map,-1); } public void put(int key, int value) { map[key] = value; } public int get(int key) { ..

qq_44822951的博客 160

leetcode数组之哈希实现

705、设计哈希集合 题目: 不使用任何内建的哈希表库设计一个哈希集合(HashSet)。 实现 MyHashSet 类: void add(key) 向哈希集合中插入值 key 。 bool contains(key) 返回哈希集合中是否存在这个值 key 。 void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。 思路: 使用拉链数组的方式 class MyHashSet: # 通过base计算hash值,需要开辟其大小的数组,数字越大,

溪语流沙的博客 802
上一篇: 【哈希-中等】438. 找到字符串中所有字母异位词
下一篇: 【位运算-简单】136. 只出现一次的数字(位运算+排序+一行代码)
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值