【Leetcode 706 】设计哈希映射——数组嵌套链表(限制哈希Key)

题目

不使用任何内建的哈希表库设计一个哈希映射(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 次 putget 和 remove 方法
class MyHashMap {//创建哈希集合大小,其表现方式为数组BASE: number;//二维数组,其第二维表现方式为链表 [[[1,1],[2,2]]]data: [number, number][][];constructor() {//初始化集合大小为 1111,注意:该值最好是质数this.BASE = 1111;// 初始化集合,长度为 BASE,其中每一个值都是一个链表,存储着值this.data = new Array(this.BASE).fill(0).map(() => []);}//   哈希函数,将哈希的key控制在一定范围,如add一万个数据,则可能要有一万个key//   哈希函数通过 取模,将key控制在固定范围,相同key的,但不同值,则用链表的方式存储//   如 key = 1 , BASE = 1111   则hashKey = 1//     key = 1112 , BASE = 1111  则hashKey = 1getHashKey(key: number) {return key % this.BASE;}put(key: number, value: number): void {// 获取该值的 hashKeyconst hashKey = this.getHashKey(key);for (const ele of this.data[hashKey]) {// 找到则更新valueif (ele[0] === key) {ele[1] = value;return;}}// 没找到,则新增this.data[hashKey].push([key, value]);}get(key: number): number {// 获取该值的 hashKeyconst hashKey = this.getHashKey(key);for (const ele of this.data[hashKey]) {// 找到则返回valueif (ele[0] === key) {return ele[1];}}// 没找到,返回-1return -1;}remove(key: number): void {// 获取该值的 hashKeyconst hashKey = this.getHashKey(key);const d = this.data[hashKey];for (let i = 0; i < d.length; i++) {// 找到,则删除if (d[i][0] === key) {d.splice(i, 1);}}}
}

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

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

相关文章

MATLAB的plot3使用技巧|更改视角|例程分享链接

plot3命令 MATLAB的plot3函数是用来绘制3D图形的函数。它可以将三维数据可视化为线段、点、曲线等形式。plot3函数可以用于绘制三维空间中的曲线、曲面、散点图等。 plot3函数的基本用法是&#xff1a; plot3(X,Y,Z)&#xff1a;绘制三维线段&#xff0c;其中X、Y、Z分别是包…

两个双指针 的 “他“和“ 她“会相遇么? —— “双指针“算法 (Java版)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…

MySQL入门学习-查询进阶.UNION

UNION操作符用于合并两个或多个SELECT语句的结果集。它可以将多个查询结果合并为一个结果集&#xff0c;这在需要从多个表中获取数据并将它们组合在一起时非常有用。下面是一个使用UNION的示例代码&#xff1a; SELECT column1, column2,...FROM table1UNIONSELECT column1, c…

springboot kafka 提高拉取数量

文章目录 背景问题复现解决问题原理分析fetch.min.bytesfetch.max.wait.ms源码分析ReplicaManager#fetchMessages 背景 开发过程中&#xff0c;使用kafka批量消费&#xff0c;发现拉取数量一直为1&#xff0c;如何提高批量拉取数量&#xff0c;记录下踩坑记录。 问题复现 ka…

攻防对抗少丢分,爱加密帮您筑起第二防线

应用程序通常处理和存储大量的敏感数据&#xff0c;如用户个人信息、财务信息、商业数据、国家数据等&#xff0c;用户量越大的应用程序&#xff0c;其需要存储和保护的用户数据越多。因此应用层长期是攻击方的核心目标&#xff0c;传统应用安全依靠防火墙(FireWall)、入侵检测…

1.7 协议层次和服务模型

协议层次 网络是一个复杂的系统!  网络功能繁杂&#xff1a;数字信号的物理信 号承载、点到点、路由、rdt、进程区分、应用等 现实来看&#xff0c;网络的许多构成元素和设备:  主机  路由器  各种媒体的链路  应用  协议  硬件, 软件 Q:如何组织和实现这个…

Linux上实现ssh免密通讯

Linux上实现ssh免密通讯 1.SSH互信原理2.SSH所需的RPM包3.两台机器实现互信4.常见问题及处理 1.SSH互信原理 SSH&#xff08;Secure Shell&#xff09;是一种安全的传输协议&#xff0c;它能让Linux系统中的服务器和客户端之间进行安全可靠的通讯。 SSH使用加密的传输方式&…

iOS组件化 方案 实现

iOS组件化 组件化的原因现在流行的组件化方案方案一、url-block &#xff08;基于 URL Router&#xff09;方案二、protocol调用方式解读 方案三、target-action调用方式解读 gitHub代码链接参考 组件化的原因 模块间解耦模块重用提高团队协作开发效率单元测试 当项目App处于…

网络原理-四

一、续 当窗口大小为0,意味着缓冲区满了,此时发送方,就因该暂停发送,发送方会周期性的除法 " 窗口探测包 " ,并不携带载荷,这样的包对于业务不产生影响,只是为了触发ACK,一旦查询出来的结果是非0,缓冲区右有空间了,发送方就可以继续发送. 二、拥塞控制 要限制发送方…

一步一步写线程之十三队列间的消息通知

一、线程和分布式的通信 随着技术的不断发展&#xff0c;多线程和分布式通信愈发的普及。那么在这种场景下的如何进行数据的通信&#xff0c;便成为了一个非常典型的问题。无论是多线程还是分布式&#xff0c;其实其抽象出来的通信机制都是类似的。或者说换句话&#xff0c;多…

java检测字符串是否包含数字和字母

在Java中&#xff0c;要检测一个字符串是否同时包含数字和字母&#xff0c;我们可以使用正则表达式&#xff08;regex&#xff09;或者通过遍历字符串并检查每个字符来实现。以下是两种方法的详细代码示例&#xff1a; 1.方法一&#xff1a;使用正则表达式 import java.util.…

【AI+知识库问答】沉浸式体验了解 AI知识库问答fastGPT

之前写过一篇文章 【AI本地知识库】个人整理的几种常见本地知识库技术方案 &#xff0c; 由于当时主要是针对AI本地知识库&#xff0c; 所以没列fastGPT。 最近经常刷到fastGPT&#xff0c;这里单独水一篇。 FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;…

Github 2024-06-01 开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-01统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5Jupyter Notebook项目2TypeScript项目1Go项目1Shell项目1Lua项目1Kong:云原生API网关与AI能力 创建周期:3482 天开发语言:Lua协议…

如何确保绩效目标执行到位?

很多企业在实施绩效过程中&#xff0c;尽管制定好了绩效目标&#xff0c;但是没有执行下去&#xff0c;管理者将原因归咎于“员工低效”、“体制机制”等问题&#xff0c;那么在人力资源管理方面&#xff0c;企业应该如何确保制定的绩效目标执行到位&#xff1f;如何提高低效能…

云原生架构相关技术_4.服务网格

1.技术特点 服务网格&#xff08;ServiceMesh&#xff09;是分布式应用在微服务软件架构之上发展起来的新技术&#xff0c;旨在将那些微服务间的连接、安全、流量控制和可观测等通用功能下沉为平台基础设施&#xff0c;实现应用与平台基础设施的解耦。这个解耦意味着开发者无需…

React@16.x(14)context 举例 - Form 表单

目录 1&#xff0c;目标2&#xff0c;实现2.1&#xff0c;index.js2.2&#xff0c;context.js2.2&#xff0c;Form.Input2.3&#xff0c;Form.Button 3&#xff0c;使用 1&#xff0c;目标 上篇文章说到&#xff0c;context 上下文一般用于第3方组件库&#xff0c;因为使用场景…

Chisel入门——在windows下vscode搭建|部署Scala2.13.3开发环境|用Chisel点亮FPGA小灯等实验

文章目录 前言一、vscode搭建scala开发环境1.1 安装Scala官方插件1.2 创建hello_world.scala文件1.3 确认java的版本(博主使用的是1.8)1.4 下载Scala Windows版本的二进制文件1.5 配置环境变量1.6 交互模式测试一下1.7 vscode运行scala 二、windows安装sbt2.1 下载sbt2.2 设置环…

函数递归及具体例子(持续更新)

递归就是函数自己调用自己 求n的阶乘 n! n * (n - 1)! 直到n为1或者0的时候为止 举个例子 int Fun(int n) {if (n < 0){return 1;}else{return n * Fun(n - 1);} }int main() {int n 0;scanf("%d", &n);int ret Fun(n);printf("%d\n", ret…

安装Kubernetes v3 ----以docker的方式部署

以docker的方式部署 docker run -d \ --restartunless-stopped \ --namekuboard \ -p 80:80/tcp \ -p 10081:10081/tcp \ -e KUBOARD_ENDPOINT"http://192.168.136.55:80" \ -e KUBOARD_AGENT_SERVER_TCP_PORT"10081" \ -v /root/kuboard-data:/data \ e…

springboot中抽象类无法注入到ioc容器

1、背景 在写代码时&#xff0c;发现service接口有两个实现类&#xff0c;并且两个实现类中没有对类名重命名&#xff0c;属性注入的时候也没有使用byName或Qualifier&#xff0c;正确情况下会发生多实现报错的问题&#xff0c;以前对这个问题进行解析过。 2、调试过程 我想…