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

题目:

不使用任何内建的哈希表库设计一个哈希集合(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] * 1000001


    def add(self, key):
        """
        :type key: int
        :rtype: None
        """
        self.hashset[key] = True


    def remove(self, key):
        """
        :type key: int
        :rtype: None
        """
        self.hashset[key] = False


    def 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 = 1000
        self.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 True
        return False

提交通过:

 

 

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

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

相关文章

基于Java+SpringBoot+Vue前后端分离精简博客系统设计和实现

基于JavaSpringBootVue前后端分离精简博客系统设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系…

线程互斥,线程安全和线程同步

多线程的基本代码编写步骤 1.创建线程pthread_create() 2.终止线程的三种方法。线程取消pthread_cancel(一般在主线程取消)&#xff0c; 线程终止pthread_exit(在其他线程执行)&#xff0c; 或者使用线程返回return 3.线程等待pthread_join 需要等待的原因是 1.已经退出的线程…

WordPress的全面解析:为什么它是创建博客和网站的首选

在当前的数字化时代&#xff0c;无论是个人博客还是企业网站&#xff0c;都需要一个强大而灵活的平台以支撑其内容和用户交互。WordPress作为全球最流行的内容管理系统&#xff08;CMS&#xff09;&#xff0c;以其强大的功能、灵活的定制性和广泛的用户基础&#xff0c;成为了…

交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计…

开关转换器中的噪声源对纹波测量的影响

由于输出纹波通常较小,示波器需要设置为高电压灵敏度。然而,这种设置容易受到电源产生的噪音的影响。其中一种常见的噪音源是电感的漂移磁场。许多廉价的电感采用了半屏蔽的I型磁心,其绕线周围包覆着铁氧体粉末和环氧树脂。即使如此,这些电感仍然会产生相当大的漂移磁场。附…

什么是CPU与GPU,它们之间有什么关系

什么是CPU与GPU&#xff0c;它们之间有什么关系一、CPU1. 核心功能2. 工作原理3. 组成部分4. 发展历程5. 性能指标6. 架构种类7. 发展趋势8. 应用领域 二、GPU三、CPU与GPU的关系 什么是CPU与GPU&#xff0c;它们之间有什么关系 一、CPU CPU&#xff0c;全称是“Central Proc…

profinet协议基础

文章目录 工业以太网自动化通讯金字塔工业以太网技术比较 profinet概述profinet特性 EtherNet通信EtherCAT通信EtherCat特性EtherCat过程同步 工业以太网 工业以太网是基于IEEE 802.3 (Ethernet)的强大的区域和单元网络。 自动化通讯金字塔 各个组织与工业以太网 工业以太网…

Docker操作容器打包(commit),压缩(save),挂载(load)

文章目录 前言一、容器打包二、将镜像压缩成tar包三、将tar包挂载为镜像结束 前言 将容器打包成镜像时&#xff0c;你正在将应用程序及其所有依赖项、文件和配置文件捆绑到一个可移植的、独立的单元中。这样做可以确保您的应用程序在不同环境中具有一致的运行方式&#xff0c;…

VBA技术资料MF143:将PowerPoint中幻灯片导出为图片

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

# 从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境

从浅入深 学习 SpringCloud 微服务架构&#xff08;二&#xff09;模拟微服务环境&#xff08;1&#xff09; 段子手168 1、打开 idea 创建父工程 创建 artifactId 名为 spring_cloud_demo 的 maven 工程。 --> idea --> File --> New --> Project --> Ma…

[蓝桥杯 | 暴搜] 学会暴搜之路

虽然会调侃蓝桥杯是暴力求解的&#xff0c;但是本弱弱不会搜&#xff0c;不知道如何搜&#xff0c;于是写下这篇碎碎念&#xff0c;记录看到过的&#xff0c;惊艳自己的暴搜。 小总结 题目特征&#xff1a;很复杂的排列组合 说是暴力&#xff0c;其实就是枚举罢了&#xff0…

java项目的构建工具-Maven

黑马程序员JavaWeb开发教程 文章目录 一、概述1、介绍&#xff08;1&#xff09;介绍&#xff08;2&#xff09;Maven的作用&#xff08;3&#xff09;官网&#xff08;4&#xff09;仓库 2、安装 二、IDEA 集成 Maven1、配置Maven环境2、创建Maven项目&#xff08;1&#xff0…

GoogleNet网络训练集和测试集搭建

测试集和训练集都是在之前搭建好的基础上进行修改的&#xff0c;重点记录与之前不同的代码。 还是使用的花分类的数据集进行训练和测试的。 一、训练集 1、搭建网络 设置参数&#xff1a;使用辅助分类器&#xff0c;采用权重初始化 net GoogleNet(num_classes5, aux_logi…

web--弱口令安全

字典(一种是产品初始化的密码&#xff0c;一种是改变的密码 对爆破密码进行加密 先这个 对账号和密码同时爆破 设置两个要用这个模式 ssh,rdp远程终端 linux的用户名为root,windows为administrator 这就被爆破了 zip,word文件猜解

【Python系列】非异步方法调用异步方法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux http协议与实现http服务器

目录 一、HTTP与URL 1、HTTP协议 2、URL 3、URL编码 4、报文与报头 报文&#xff08;Message&#xff09; 报头&#xff08;Header&#xff09; 二、HTTP&#xff08;超文本传输协议&#xff09;的内部运作机理 请求部分&#xff1a; 响应部分&#xff1a; 三、实现…

实验二: ping命令的使用

1.实验环境 同实验案例一环境 2.需求描述 熟悉ping命令的用法并熟悉ping命令的各种参数 3.推荐步骤 分别ping一个存在的和不存在的P 地址&#xff0c;观察返回的信息分别测试ping命令的相关参数 4.实验步骤 4.1、分别ping一个存在的和不存在的IP 地址 C:\>ping 192.1…

C语言如何使⽤指针?

一、问题 指针变量在初始化以后就可以使⽤和参与操作了&#xff0c;那么就要⽤到对指针变量最常⽤的两个操作符——> * 和 &#xff06; 。 二、解答 这⾥⼜要提到始终贯穿着指针的⼀个符号“ * ”&#xff0c;但是这⾥的“ * ”是作为指针运算符使⽤的&#xff0c;叫做取内…

8个十分受小企业欢迎的电子商务网站制作工具,自助建站,一键生成免安装

如果您的小型企业需要一个网站&#xff0c;通常会考虑使用自助建站系统来构建与自己业务有关的电子商务站或小程序商城。 在这个时代&#xff0c;电子商务不仅迅速成为许多网站上的热门功能&#xff0c;而且几乎成为许多企业生存的必要条件&#xff0c;因为越来越多的人将大部分…

【C++】list的介绍及使用说明

目录 00.引言 01.list的介绍 模版类 独立节点存储 list的使用 1.构造函数 2.迭代器的使用 分类 运用 3.容量管理 empty()&#xff1a; size(): 4.元素访问 5.增删查改 00.引言 我们学习数据结构时&#xff0c;学过两个基本的数据结构&#xff1a;顺序表和链表。顺…