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

embedded/2024/9/24 7:19:25/

题目:

不使用任何内建的哈希表库设计一个哈希集合(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值。代码如下:

python">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,代码如下:

python">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/embedded/3549.html

相关文章

DBeaver导入sql文件

DBeaver导入sql文件 下载数据库 数据库下载地址&#xff1a; https://www.begtut.com/mysql/mysql-sample-database.html数据库导入 获取sql文件中创建的数据库的名称&#xff0c;创建一个同名的数据库。 输入数据库的名称&#xff0c;设置字符集和排序规则 数据库创建完…

【Docker】有关docker操作命令

最近在使用docker以及docker-compose等进行项目环境搭建&#xff0c;以及项目的部署&#xff0c;有些命令记录一下&#xff1a; 删除所有镜像 docker rmi $(docker images -q) -f停止所有容器 docker stop $(docker ps -aq)进入容器内部 docker exec -it CONTAINER_ID /bin/bas…

桥接模式【结构型模式C++】

1.概述 桥接模式是一种结构型设计模式&#xff0c;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&am…

2024华中杯C题光纤传感器平面曲线重建原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024华中杯数学建模C题的完整论文啦。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 10 一、问题重述 12 二&#xff0e;问题分析 13 2.1问题一 13 2.2问题二 14 2.3问题三 14 三、模型假设 15 四、…

【鸿蒙开发】第二十一章 Media媒体服务(一)

1 简介 Media Kit&#xff08;媒体服务&#xff09;提供了AVPlayer和AVRecorder用于播放、录制音视频。 在Media Kit的开发指导中&#xff0c;将介绍各种涉及音频、视频播放或录制功能场景的开发方式&#xff0c;指导开发者如何使用系统提供的音视频API实现对应功能。比如使用…

统一SQL-支持CHAR和VARCHAR2 (size BYTE|CHAR)转换

统一SQL介绍 https://www.light-pg.com/docs/LTSQL/current/index.html 源和目标 源数据库&#xff1a;Oracle 目标数据库&#xff1a;Postgresql&#xff0c;TDSQL-MySQL&#xff0c;达梦8&#xff0c;LightDB-Oracle 操作目标 在Oracle中的CHAR和VARCHAR2数据类型&…

【MogDB】在ORACLE和MogDB中查看存储过程出参游标数据的方式

一、前言 使用ORACLE作为数据库的应用软件中&#xff0c;偶尔会遇到使用游标作为出参的存储过程&#xff0c;这种存储过程迁移到MogDB并不需要进行改造&#xff0c;但是在开发这样的存储过程时&#xff0c;开发人员偶尔会想要在数据库中测试执行一下&#xff0c;看看游标中的数…

Labview2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 LabVIEW是一种由美国国家仪器&#xff08;NI&#xff09;公司开发的程序开发环境&#xff0c;它显著区别于其他计算机语言&#xff0c;如C和BASIC。传统的计算机语言是基于文本的语言来产生代码&#xff0c;而LabVIEW则采用图形化…