【Leetcode 705 】设计哈希集合——数组嵌套链表(限制哈希Key)

题目

不使用任何内建的哈希表库设计一个哈希集合(HashSet)。

实现 MyHashSet 类:

  • void add(key) 向哈希集合中插入值 key 。
  • bool contains(key) 返回哈希集合中是否存在这个值 key 。
  • void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。

 

示例:

输入:
["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
输出:
[null, null, null, true, false, null, true, null, false]

解释:
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1);      // set = [1]
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(1); // 返回 True
myHashSet.contains(3); // 返回 False ,(未找到)
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(2); // 返回 True
myHashSet.remove(2);   // set = [1]
myHashSet.contains(2); // 返回 False ,(已移除)

提示:

  • 0 <= key <= 106
  • 最多调用 104 次 addremove 和 contains

时间复杂度:O(\frac{n}{b})

空间复杂度:O(n+b)

题解 

class MyHashSet {
  //创建哈希集合大小,其表现方式为数组
  BASE: number;

  //二维数组,其第二维表现方式为链表
  data: number[][];
  constructor() {
    //初始化集合大小为 1111,注意:该值最好是质数
    this.BASE = 1111;
    // 初始化集合,长度为 BASE,其中每一个值都是一个链表,存储着值
    this.data = Array(this.BASE)
      .fill(0)
      .map(() => new Array());
  }

  //   哈希函数,将哈希的key控制在一定范围,如add一万个数据,则可能要有一万个key
  //   哈希函数通过 取模,将key控制在固定范围,相同key的,但不同值,则用链表的方式存储
  //   如 key = 1 , BASE = 1111   则hashKey = 1
  //      key = 1112 , BASE = 1111  则hashKey = 1
  hash(key: number) {
    return key % this.BASE;
  }

  // 新增
  add(key: number): void {
    // 获取该值的 hashKey
    const hashKey = this.hash(key);

    // 循环该 hashKey 的 hash值
    for (const ele of this.data[hashKey]) {
      // 有此数据,则不新增,直接返回
      if (ele === key) return;
    }
    // 新增数据
    this.data[hashKey].push(key);
  }

  remove(key: number): void {
    // 获取该值的 hashKey
    const hashKey = this.hash(key);

    // 循环该 hashKey 的 hash值
    let d = this.data[hashKey];
    for (let i = 0; i < d.length; i++) {
      // 找到则删除
      if (key === d[i]) {
        d.splice(i, 1);
        return;
      }
    }
  }

  contains(key: number): boolean {
    // 获取该值的 hashKey
    const hashKey = this.hash(key);

    // 循环该 hashKey 的 hash值
    for (const ele of this.data[hashKey]) {
      // 包含此值,则返回true
      if (ele === key) return true;
    }
    return false;
  }
}

/**
 * Your MyHashSet object will be instantiated and called as such:
 * var obj = new MyHashSet()
 * obj.add(key)
 * obj.remove(key)
 * var param_3 = obj.contains(key)
 */

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建智慧银行保险系统的先进技术架构

随着科技的不断发展&#xff0c;智慧银行保险系统正日益受到关注。在这个数字化时代&#xff0c;构建一个先进的技术架构对于智慧银行保险系统至关重要。本文将探讨如何构建智慧银行保险系统的先进技术架构&#xff0c;以提升服务效率、降低风险并满足客户需求。 ### 1. 智慧银…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第五周) - Transformer

Transformer 1. 注意力机制 在语言建模中&#xff0c;注意力(attention)是一个关键机制&#xff0c;用于在给定上下文中访问相关信息以进行预测。注意力机制允许模型根据输入上下文中的重要信息来加权关注不同的部分&#xff0c;并根据其重要性来决定对不同部分的关注程度。 …

短视频毫无营养:四川京之华锦信息技术公司

短视频毫无营养&#xff1a;现象背后的深度剖析 在数字时代&#xff0c;短视频以其短小精悍、易于传播的特点迅速崛起&#xff0c;成为社交媒体上的热门内容。然而&#xff0c;随着短视频的泛滥&#xff0c;关于其内容质量参差不齐、缺乏营养价值的争议也日益加剧。四川京之华…

【代码随想录训练营】【Day 37】【贪心-4】| Leetcode 840, 406, 452

【代码随想录训练营】【Day 37】【贪心-4】| Leetcode 840, 406, 452 需强化知识点 python list sort的高阶用法&#xff0c;两个key&#xff0c;另一种逆序写法python list insert的用法 题目 860. 柠檬水找零 思路&#xff1a;注意 20 块找零&#xff0c;可以找3张5块升…

jpeg压缩算法学习(1)——离散余弦变换

离散余弦变换是jpeg压缩算法的关键步骤 思想 离散余弦变换的基本原理是&#xff1a;每一组离散的数据都可以由一组不同频率的余弦波来表示。 应用于图片上就是&#xff1a;将像素值转换为不同频率的余弦函数的系数&#xff08;权重&#xff09; 像素值——>权重 一维离…

52.WEB渗透测试-信息收集-CDN识别绕过(5)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;51.WEB渗透测试-信息收集-CDN识别绕过&#xff08;4&#xff09; 端口扫描其他内容参考&…

在 GPU 上实现全规模文件系统加速

摘要 现代高性能计算和人工智能计算解决方案经常使用 GPU 作为其主要计算能力来源。这就为 GPU 应用程序的存储操作造成了严重的不平衡&#xff0c;因为每一个此类存储操作都必须向 CPU 发出信号并由 CPU 处理。在 GPU4FS 中&#xff0c;我们针对这种不平衡提出了一个彻底的解决…

11. RBAC权限管理从零到一实现(二)

前端页面已提交至git https://github.com/SJshenjian/cloud-web默认用户名密码admin 1

18 跨团队 没有汇报线的人和事就是推不动?

在“05 | 大项目&#xff1a;把握关键点&#xff0c;谋定而后动”和“11 | 勤沟通&#xff1a;在信任的基础上&#xff0c;让沟通简单”两讲中&#xff0c;我提过“跨团队”这件事&#xff0c;很多同学带团队之后&#xff0c;无法回避的一个问题就是“跨团队协作”&#xff0c;…

SSM与Mamba模型学习

transformer的缺陷 自注意力机制的计算范围只限于窗口内&#xff0c;不能直接处理窗口外的元素&#xff0c;不能照顾到整个序列。 由于计算复杂度随着窗口的长度呈几何平方式增长&#xff0c;所以不能一味地增加窗口长度来解决。 Transformer本质上是通过位置编码将序列数据空…

【自然语言处理】【Scaling Law】Observational Scaling Laws:跨不同模型构建Scaling Law

相关博客 【自然语言处理】【Scaling Law】Observational Scaling Laws&#xff1a;跨不同模型构建Scaling Law 【自然语言处理】【Scaling Law】语言模型物理学 第3.3部分&#xff1a;知识容量Scaling Laws 【自然语言处理】Transformer中的一种线性特征 【自然语言处理】【大…

关于苹果发布IOS18系统,以及Siri升级贾维斯

随着科技的不断进步&#xff0c;手机操作系统也在持续升级&#xff0c;为用户提供更加智能化、便捷化的体验。近期&#xff0c;苹果公司即将推出的iOS 18系统引起了广泛关注。作为iPhone历史上的重大更新&#xff0c;iOS 18系统带来了众多新功能&#xff0c;将进一步提升iPhone…

美国科技股为何突然崩了?

英伟达毛利率那么高&#xff0c;谁来“买单”&#xff1f;高盛认为&#xff0c;投资AI的成本巨大&#xff0c;引发了市场对科技股盈利能力和估值合理性的担忧。软件股今年以来的疲态&#xff0c;可能也反映了投资者对AI的担忧。 直到最近还势不可挡的科技股突然崩塌。 隔夜美…

Java基础知识点(标识符、数据类型、变量、运算符、包机制、流程控制、方法、数组)

文章目录 标识符数据类型强弱类型语言数据类型基础类型 类型转换 常量与变量变量的定义变量作用域变量命名规范常量 运算符包机制流程控制选择结构循环结构 方法&#xff08;Method&#xff09;数组概述申明创建java.util.Arrays类 标识符 Java标识符的命名规则如下&#xff1…

SIMBA:单细胞嵌入与特征

目前大多数单细胞分析管道仅限于细胞嵌入&#xff0c;并且严重依赖于聚类&#xff0c;而缺乏显式建模不同特征类型之间相互作用的能力。此外&#xff0c;这些方法适合于特定的任务&#xff0c;因为不同的单细胞问题的表述方式不同。为了解决这些缺点&#xff0c;SIMBA作为一种图…

RabbitMQ二、RabbitMQ的六种模式

一、RabbitMQ的六种模式 RabbitMQ共有六种工作模式&#xff1a; 简单模式&#xff08;Simple&#xff09;工作队列模式&#xff08;Work Queue&#xff09;发布订阅模式&#xff08;Publish/Subscribe&#xff09;路由模式&#xff08;Routing&#xff09;通配符模式&#xff…

ThinkPHP5发送邮件如何配置?有哪些技巧?

ThinkPHP5发送邮件的性能怎么优化&#xff1f;批量发信的方法&#xff1f; 邮件发送功能是许多应用程序的关键组成部分&#xff0c;尤其是在用户注册、密码重置和通知等功能中尤为重要。AokSend将详细介绍如何在thinkphp5中配置和使用邮件发送功能&#xff0c;并确保你可以轻松…

DPDK基础组件二(igb_uio、kni、rcu)

The Linux driver implementer’s API guide — The Linux Kernel documentation 一、igb_uid驱动 参考博客:https://zhuanlan.zhihu.com/p/543217445 UIO(Userspace I/O)是运行在用户空间的I/O技术 代码位置:dpdk----/kernel/linux/igb_uio目录 igb_uio 是 dpdk 内部实…

从0开发一个Chrome插件:搭建开发环境

前言 这是《从0开发一个Chrome插件》系列的第三篇文章&#xff0c;本系列教你如何从0去开发一个Chrome插件&#xff0c;每篇文章都会好好打磨&#xff0c;写清楚我在开发过程遇到的问题&#xff0c;还有开发经验和技巧。 《从0开发一个Chrome插件》专栏&#xff1a; 从0开发一…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑动态定价的新能源汽车能源站优化运行》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…