初学python记录:力扣705. 设计哈希集合

news/2024/11/16 7:45:10/

题目:

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

实现 MyHashSet 类:

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

提示:

  • 0 <= key <= 10^6
  • 最多调用 104 次 addremove 和 contains

思考:

偷懒做法:超大数组

因为 0<= key <= 10^6,所以可以建立一个长度为 10^6 + 1 的超大数组,数组的索引代表key值,数组的值(True / False)代表是否存在key值。代码如下:

class MyHashSet(object):def __init__(self):self.hashset =  [False] * 1000001def add(self, key):""":type key: int:rtype: None"""self.hashset[key] = Truedef remove(self, key):""":type key: int:rtype: None"""self.hashset[key] = Falsedef contains(self, key):""":type key: int:rtype: bool"""return self.hashset[key]

提交通过:

 

正经做法:哈希函数+链地址法

设置一个长度为volume的数组hash,由volume个空列表组成。哈希函数为index=key%volume。那么对于任意值key,用哈希函数计算得到key所在的列表的位置,然后在列表中进行add、remove、contains操作。

由于 0<= key <= 10^6,所以取volume值为10^3,代码如下:

class MyHashSet(object):def __init__(self):self.volume = 1000self.hashset = [[] for _ in range(self.volume)]def _hash(self, key):return key % self.volume    # 哈希函数def add(self, key):""":type key: int:rtype: None"""index = self._hash(key)if key not in self.hashset[index]:self.hashset[index].append(key)def remove(self, key):""":type key: int:rtype: None"""index = self._hash(key)if key in self.hashset[index]:self.hashset[index].remove(key)def contains(self, key):""":type key: int:rtype: bool"""index = self._hash(key)if key in self.hashset[index]:return Truereturn False

提交通过:

 

 


http://www.ppmy.cn/news/1423107.html

相关文章

【NLP】大语言模型基础之Transformer结构

大语言模型基础之Transformer结构 1. Transformer结构总览2. 嵌入表示层2. 注意力层3. 前馈层4. 残差连接与层归一化5. 编码器和解码器结构参考文献 Transformer是一种深度学习模型架构&#xff0c;由Vaswani等人于2017年在论文《Attention is All You Need》中首次提出。它在自…

本地启用并操作Redis

本篇文章将向各位讲解redis的基础用法&#xff0c;废话不多说我们直接开始吧&#xff01; 首先需要下载redis到你本地&#xff0c;我这儿是下载到以下文件夹中&#xff1a; 双击redis-server.exe文件运行redis&#xff1a; 然后我们另外启用一个命令窗口&#xff08;需要进入你…

IOS H5页面中 HLS视频无法正常播放,使用hls.插件

IOS H5页面中 HLS视频无法正常播放&#xff0c;使用hls.插件 HLS.js依靠 HTML5 视频和 MediaSource Extensions 进行播放。 所有 iPhone 浏览器 &#xff08;iOS&#xff09; 都没有可用的 MediaSourceExtension&#xff0c;因此Hls.js将不起作用。如果您在 iPhone 上检查 Hl…

LeetCode-热题100:230. 二叉搜索树中第K小的元素

题目描述 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a; root [3,1,4,null,2], k 1 输出&#xff1a; 1 示例 2&#…

Android 性能优化(七):APK安装包体积优化

包体积优化重要性 移动 App 特别关注投放转化率指标&#xff0c;而 App 包体积是影响用户新增的重要因素&#xff0c;而 App 的包体积又是影响投放转化率的重要因素。 Google 2016 年公布的研究报告显示&#xff0c;包体积每上升 6MB 就会带来下载转化率降低 1%&#xff0c; …

Java双列集合

Map集合 Java Map集合是一种用于存储键值对的数据结构&#xff0c;它提供了从键到值的映射。其特点和常用操作如下&#xff1a; 唯一性&#xff1a;Map中的键&#xff08;key&#xff09;必须是唯一的&#xff0c;这意味着不能有两个相同的键存在于同一个Map集合中。这是为了…

Android 应用分配的内存大小是多少

Android应用给定的内存大小可以因设备而异&#xff0c;主要受设备的硬件配置和操作系统的限制。不同的设备&#xff0c;尤其是有着不同RAM大小的设备&#xff0c;可能会为应用分配不同的最大内存数量。此外&#xff0c;同一个设备上&#xff0c;不同版本的Android操作系统也可能…

k8s中修复mongodb启动失败

背景 同事反馈 dev环境的yapi不能登录&#xff0c;看了一下是同事两年前用helm搭建的。单副本使用。 排查发现是后端数据库mongodb数据库挂掉。 rootdev-k8s-master03:~# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mo…