哈希表的使用
哈希表的概念:哈希表的核心是哈希函数,它接受一个键作为输入,经过一系列计算后返回一个整数,这个整数就是该键对应的存储位置(索引)。理想情况下,不同的键应该映射到不同的存储位置,但在实际应用中,可能会出现多个键映射到同一个位置的情况,这被称为哈希冲突。
哈希结构(三种常见的):
1.set(集合) 2.数组 3.map(映射)
哈希函数的设计至关重要,一个好的哈希函数应该满足以下几个特点:
1、确定性:对于相同的键,哈希函数必须始终返回相同的哈希值。
2、高效性:计算哈希值的过程应该尽可能快,以保证哈希表的操作效率。
3、均匀性:哈希函数应该尽可能均匀地将键分布到各个存储位置,减少哈希冲突的发生。
哈希冲突:哈希冲突指的是当使用哈希函数将不同的键(Key)映射到哈希表中相同的存储位置(索引)的情况。由于哈希表的存储位置数量是有限的,而可能的键的数量往往是无限的,所以在实际应用中,很难保证每个键都能被哈希函数映射到不同的位置,从而导致哈希冲突的发生。(可以用开放寻址法和链地址法解决)
哈希表的操作
1、 插入操作:首先通过哈希函数计算键的哈希值,找到对应的存储位置。如果该位置为空,则直接插入键值对;如果发生哈希冲突,根据采用的冲突解决方法进行处理。
2、 查找操作:同样通过哈希函数计算键的哈希值,找到对应的存储位置。如果该位置存储的键与要查找的键相同,则返回对应的值;如果不同或该位置为空,则表示未找到。
3、 删除操作:先找到要删除的键所在的位置,然后将该位置标记为已删除(在开放寻址法中)或从链表中移除(在链地址法中)。
哈希表插入、查找、删除操作都很高效,一般状况下的时间复杂度均为O(1),如果哈希冲突严重时即所有的键值都在同一个地方那么三个操作的时间复杂度就会转化为O(n)。
哈希表在题目里的应用:可以统计某个元素出现的次数...
一、单词字母异位
解题思路(哈希表):
1.初始化计数数组:首先,创建一个长度为 26 的数组 record,用于记录字符串中每个小写英文字母出现的次数。数组的每个位置对应一个字母('a' 对应位置 0,'b' 对应位置 1,依此类推)。
2.统计字符串 s 中每个字符的出现次数:遍历字符串 s 中的每个字符 i,通过计算 ord(i) - ord("a") 得到字符相对于 'a' 的偏移量(即字符在字母表中的位置),然后将对应位置的计数器加一。
3.减去字符串 t 中每个字符的出现次数:遍历字符串 t 中的每个字符 i,同样通过计算 ord(i) - ord("a") 得到字符的位置,然后将对应位置的计数器减一。
4.检查计数器数组:最后,遍历计数器数组 record。如果所有元素的值都为 0,说明字符串 s 和 t 包含相同数量和种类的字符,因此它们是字母异位词,函数返回 True。如果数组中有任何非零元素,说明两个字符串的字符种类或数量不同,函数返回 False。
5.输入和输出:代码最后部分从用户那里读取两个字符串 s 和 t,然后调用 isAnagram 函数判断它们是否为字母异位词,并打印结果。
def isAnagram(s,t):record = [0] * 26for i in s:#并不需要记住字符a的ASCII,只要求出一个相对数值就可以了record[ord(i) - ord("a")] += 1for i in t:record[ord(i) - ord("a")] -= 1for i in range(26):if record[i] != 0:#record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。return Falsereturn True
s = input()
t = input()
print(isAnagram(s,t))
二、赎金信
解题思路(哈希表):
初始化字符计数器:首先,创建一个空字典
counts
,用于记录杂志magazine
中每个字符的出现次数。统计杂志中的字符:遍历杂志字符串
magazine
中的每个字符c
,如果字符c
不在字典counts
中,则将其添加到字典中,并将对应的值设为 1(表示该字符在杂志中出现了一次)。如果字符c
已经在字典中,则将其对应的值加一(表示该字符在杂志中又出现了一次)。检查信中的字符:遍历勒索信字符串
ransomNote
中的每个字符c
,执行以下操作:
- 如果字符
c
不在字典counts
中,说明杂志中没有这个字符,因此无法构造出勒索信,函数返回False
。- 如果字符
c
在字典counts
中,但对应的值为 0,说明杂志中该字符的数量已经被之前的信字符用完,因此也无法构造出勒索信,函数返回False
。- 如果字符
c
在字典counts
中且对应的值大于 0,则将对应的值减一(表示使用了一个该字符来构造信)。判断能否构造完成:如果勒索信中的所有字符都成功地在杂志中找到了足够的数量,并且没有触发返回
False
的条件,那么函数在遍历完勒索信后返回True
,表示可以使用杂志中的字符来构造出勒索信。输入和输出:代码最后部分从用户那里读取两个字符串
r
(代表信)和m
(代表杂志),然后调用canConstruct
函数判断是否能用杂志构造出信,并打印结果。
def canConstruct(ransomNote, magazine):counts = {}for c in magazine:counts[c] = counts.get(c, 0) + 1for c in ransomNote:if c not in counts or counts[c] == 0:return Falsecounts[c] -= 1return True
r = input()
m = input()
print(canConstruct(r,m))
相关文章:
哈希表的使用
哈希表的概念:哈希表的核心是哈希函数,它接受一个键作为输入,经过一系列计算后返回一个整数,这个整数就是该键对应的存储位置(索引)。理想情况下,不同的键应该映射到不同的存储位置,…...
(一)QT的简介与环境配置WIN11
目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt(发音:[kjuːt],类似“cute”)是一个跨平台的开发库,主要用于开发图形用户界面(GUI)应用程序,…...
Qt监控系统辅屏预览/可以同时打开4个屏幕预览/支持5x64通道预览/onvif和rtsp接入/性能好
一、前言说明 在监控系统中,一般主界面肯定带了多个通道比如16/64通道的画面预览,随着电脑性能的增强和多屏幕的发展,再加上现在监控摄像头数量的增加,越来越多的用户希望在不同的屏幕预览不同的实时画面,一个办法是打…...
Python元组详解:不可变序列的魅力
Python元组详解:不可变序列的魅力 在Python中,元组(Tuple)是一种非常重要的数据结构。它与列表(List)类似,但有一个关键的区别:元组是不可变的。这意味着一旦创建了一个元组&#x…...
Qt5离线安装包无法下载问题解决办法
想在电脑里装一个Qt,但是直接报错。果然还是有解决办法滴。 qt download from your ip is not allowed Qt5安装包下载办法 方法一:简单直接,直接科学一下,不过违法行为咱不做,遵纪守法好公民(不过没办法阻…...
【蓝桥杯】43695.填字母游戏
题目描述 小明经常玩 LOL 游戏上瘾,一次他想挑战 K 大师,不料 K 大师说: “我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩 LOL 了”。 K 大师在纸上画了一行 n 个格子,要小明和他交替往其中填入…...
GD32的SPI程序读写程序,SPI特性研究
拿到一个SPI芯片的时序图: 能够知道这个过程需要24位,因此SPI的的帧长度设置为8位,然后读写3次。 spi_init_struct.frame_size SPI_FRAMESIZE_8BIT;如果帧长度设置为16位,读写两次就有32位了。 当然也可以设置帧长度为…...
PSD是什么图像格式?如何把PSD转为JPG格式?
在图形设计的世界里,Photoshop 文档(PSD)格式是 Adobe Photoshop 的原生文件格式,它允许设计师保存图像中的图层、蒙版、透明度和不同色彩模式等信息。对于需要进一步编辑的设计作品来说,PSD 文件提供了极大的灵活性。…...
[MoeCTF 2022]ezhtml
题目 查看页面源代码 有个/evil.js文件打开查看 看到了flag NSSCTF{e15f7f51-d1a0-4d1b-a96d-c987a4fe69a0} 到这里也就可以直接结束了 // 获取元素节点 var sx document.querySelector(#sx); // 获取 id 为 sx 的元素节点 var yw document.querySelector(#yw); // 获取…...
windows系统如何检查是否开启了mongodb服务
windows系统如何检查是否开启了mongodb服务!我们有很多软件开发,网站开发时候需要使用到这个mongodb数据库,下面我们看看,如何在windows系统内排查,是否已经启动了本地服务。 在 Windows 系统上,您可以通过…...
在软件开发中纳入数据安全措施的最佳实践
在当今数字化时代,网络安全已成为各类规模企业的首要任务。随着网络威胁发生的频率日益增加且复杂程度不断提高,企业定期更新安全协议以保护敏感数据并防止未经授权的访问至关重要。 通过定期更新安全协议确保网络安全 我们深知网络安全的重要性&#…...
BAHD酰基转移酶对紫草素的手性催化-文献精读105
Two BAHD Acyltransferases Catalyze the Last Step in the Shikonin/Alkannin Biosynthetic Pathway 两个BAHD酰基转移酶催化了紫草素/左旋紫草素生物合成途径中的最后一步 一个BAHD酰基转移酶专门催化紫草素的酰基化,而另一个BAHD酰基转移酶则仅催化紫草素的对映…...
信息收集 CTF 1 挑战通关指南
大家好!今天我想和大家分享 Information Gathering CTF 1 挑战的完整攻略。我将解释我是如何逐步攻克每一个 flag,并使用了哪些工具。放心,我不会直接给出 flag,因为学习的目的不是直接提交答案,而是掌握解决问题的方法…...
Vue 3 中的计算属性:只读与可读写的使用与案例
在 Vue 3 中,计算属性(Computed Properties)是一种强大的工具,它允许我们根据响应式数据动态计算并返回一个新的值。计算属性具有缓存机制,只有当依赖的响应式数据发生变化时,才会重新计算。本文将详细介绍…...
Day24-【13003】短文,数据结构与算法开篇,什么是数据元素?数据结构有哪些类型?什么是抽象类型?
文章目录 13003数据结构与算法全书框架考试题型的分值分布如何? 本次内容概述绪论第一节概览什么是数据、数据元素,数据项,数据项的值?什么是数据结构?分哪两种集合形式(逻辑和存储)?…...
Debian或Ubuntu系统中重置MySQL的root密码
你提供的步骤是针对在Debian或Ubuntu系统中重置MySQL的root密码的过程。以下是对你提供的步骤的详细说明和补充: 步骤 1.1 - 1.3:进入MySQL配置目录并使用debian-sys-maint账户登录MySQL # 进入MySQL配置目录 cd /etc/mysql/ # 使用vim编辑器打开debia…...
libOnvif通过组播不能发现相机
使用libOnvif库OnvifDiscoveryClient类, auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误: end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…...
实现B-树
一、概述 1.历史 B树(B-Tree)结构是一种高效存储和查询数据的方法,它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…...
JVM常见知识点
在《深入理解Java虚拟机》一书中,介绍了JVM的相关特性。 1、JVM的内存区域划分 在真实的操作系统中,对于地址空间进行了分区域的设计,由于JVM是仿照真实的机器进行设计的,那么也进行了分区域的设计。核心区域有四个,…...
输入某年某月某日,判断这一天是这一年的第几天
""" 题目:输入某年某月某日,判断这一天是这一年的第几天 考虑特殊情况闰年 """ yearint(input("请输入年份:")) monthint(input("请输入月份: ")) dayint(input("请输入日期: "…...
12、本地缓存分布式缓存(未完待续)
1、哪些数据适合放入缓存? 即时性、数据一致性要求不高的访问量大且更新频率不高的数据(读多,写少) 2、本地缓存 1、本地缓存,如果是单体项目,部署到一台服务器上,就不存在什么问题ÿ…...
Spring MVC 综合案例
目录 一. 加法计算器 1. 准备工作 2. 约定前后端交互接口 需求分析 接口定义 3. 服务器端代码 4. 运行测试 二. 用户登录 1. 准备工作 2. 约定前后端交互接口 需求分析 接口定义 (1) 登录界面接口 (2) 首页接口 3. 服务器端代码 4. 运行测试 三. 留言板 1. 准备…...
【深入理解FFMPEG】命令行阅读笔记
这里写自定义目录标题 第三章 FFmpeg工具使用基础3.1 ffmpeg常用命令3.1.13.1.3 转码流程 3.2 ffprobe 常用命令3.2.1 ffprobe常用参数3.2.2 ffprobe 使用示例 3.3 ffplay常用命令3.3.1 ffplay常用参数3.3.2 ffplay高级参数3.3.4 ffplay快捷键 第4章 封装与解封装4.1 视频文件转…...
2025.1.26机器学习笔记:C-RNN-GAN文献阅读
2025.1.26周报 文献阅读题目信息摘要Abstract创新点网络架构实验结论缺点以及后续展望 总结 文献阅读 题目信息 题目: C-RNN-GAN: Continuous recurrent neural networks with adversarial training会议期刊: NIPS作者: Olof Mogren发表时间…...
嵌入式蓝桥杯电子赛嵌入式(第14届国赛真题)总结
打开systic 生成工程编译查看是否有问题同时打开对应需要的文档 修改名称的要求 5.简单浏览赛题 选择题,跟单片机有关的可以查相关手册 答题顺序 先从显示开始看 1,2 所以先打开PA1的定时器这次选TIM2 从模式、TI2FP2二通道、内部时钟、1通道设为直接2通道设置…...
【机器学习】深入探索SVM:支持向量机的原理与应用
目录 🍔 SVM引入 1.1什么是SVM? 1.2支持向量机分类 1.3 线性可分、线性和非线性的区分 🍔 小结 学习目标 知道SVM的概念 🍔 SVM引入 1.1什么是SVM? 看一个故事,故事是这样子的: 在很久以前的情人节…...
Leetcode40: 组合总和 II
题目描述: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 代码思路ÿ…...
项目测试之MockMvc
文章目录 基础基础概念Mockxxx一般实现文件位置 实战MockMvc与Test注解不兼容RequestParams参数RequestBody参数 基础 基础概念 定义:是Spring框架提供的一种用于测试Spring MVC控制器的工具,它允许开发者在不启动完整的web服务器的情况下,…...
网易Android开发面试题200道及参考答案 (下)
说明原码、反码、补码的概念 原码:是一种简单的机器数表示法。对于有符号数,最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。比如,对于 8 位二进制数,+5 的原码是 00000101,-5 的原码是 10000101。原码的优点是直观,容易理解,但在进行加减法运算时,…...
PHP根据IP地址获取地理位置城市和经纬度信息
/** 根据IP地址 获取地理位置*/ function getLocationByIP($ip) {$url "http://ip-api.com/json/{$ip}?langzh-CN&fieldsstatus,message,country,countryCode,region,regionName,city,lat,lon,timezone,isp,org,as";$response file_get_contents($url);$data …...
AI Agent的多轮对话:提升用户体验的关键技巧
在前面的文章中,我们讨论了 AI Agent 的各个核心系统。今天,我想聊聊如何实现一个好用的多轮对话系统。说实话,这个话题我琢磨了很久,因为它直接影响到用户体验。 从一个槽点说起 还记得我最开始做对话系统时的一个典型场景&…...
在docker上部署nacos
一、首先下载nacos的docker镜像 docker pull nacos:2.5.0 二、然后下载nacos的安装包,这里是为了拿到他的配置文件。下载完解压缩后,以备后用 https://download.nacos.io/nacos-server/nacos-server-2.5.0.zip?spm5238cd80.6a33be36.0.0.2eb81e5d7mQ…...
ComfyUI实现老照片修复——AI修复老照片(ComfyUI-ReActor / ReSwapper)解决天坑问题及加速pip下载
AI修复老照片,试试吧,不一定好~~哈哈 2023年4月曾用过ComfyUI,当时就感慨这个工具和虚幻的蓝图很像,以后肯定是专业人玩的。 2024年我写代码去了,AI做图没太关注,没想到,现在ComfyUI真的变成了工…...
Win11画图工具没了怎么重新安装
有些朋友想要简单地把图片另存为其他格式,或是进行一些编辑,但是发现自己的Win11系统里面没有画图工具,这可能是因为用户安装的是精简版的Win11系统,解决方法自然是重新安装一下画图工具,具体应该怎么做呢?…...
Git Bash 配置 zsh
博客食用更佳 博客链接 安装 zsh 安装 Zsh 安装 Oh-my-zsh github仓库 sh -c "$(curl -fsSL https://install.ohmyz.sh/)"让 zsh 成为 git bash 默认终端 vi ~/.bashrc写入: if [ -t 1 ]; thenexec zsh fisource ~/.bashrc再重启即可。 更换主题 …...
《STL基础之hashtable》
【hashtable导读】STL为大家提供了丰富的容器,hashtable也是值得大家学习和掌握的基础容器,而且面试官经常会把它和hashmap混在一起,让同学们做下区分。因此关于hashtable的一些特性,比如:底层的数据结构、插入、查找元…...
Vue3组件重构实战:从Geeker-Admin拆解DataTable的最佳实践
一、前言 背景与动机 在当前的开发实践中,我们选择了开源项目 Geeker-Admin 作为前端框架的二次开发基础。其内置的 ProTable.vue 组件虽然提供了一定程度的开箱即用性,但在实际业务场景中逐渐暴露出设计上的局限性,尤其是其将 搜索条件表单…...
小智 AI 聊天机器人
小智 AI 聊天机器人 (XiaoZhi AI Chatbot) 👉参考源项目复现 👉 ESP32SenseVoiceQwen72B打造你的AI聊天伴侣!【bilibili】 👉 手工打造你的 AI 女友,新手入门教程【bilibili】 项目目的 本…...
关于圆周率的新认知
从自然对数底 的泰勒展开, 可以得出 的展开式, 它可以被认为是,以 0 为周期的单位 1 ,以 1 为周期的单位 1 ,以 2 为周期的单位 1 等所有自然数为周期的单位 1 分阶段合成(体现为阶乘的倒数)之…...
【趋势】《2024—2026金融科技十大趋势预测》一览
本白皮书基于新华三在金融行业的前沿实践和IDC的全球研究成果,深入分析了金融科技领域的十大关键趋势,旨在为金融机构提供前瞻性的战略指导和业务创新的参考。 导言 当前,在地缘政治冲突加剧、商业经济市场环境高度不确定、数字化业务加速发展的背景下,金融行业处于深度变…...
vim 中粘贴内容时提示: -- (insert) VISUAL --
目录 问题现象:解决方法:问题原因: 问题现象: 使用 vim 打开一个文本文件,切换到编辑模式后,复制内容进行粘贴时有以下提示: 解决方法: 在命令行模式下禁用鼠标支持 :set mouse …...
CAPL高级应用
CAPL高级应用 目录 CAPL高级应用1. 引言2. 多线程编程2.1 多线程编程简介2.2 多线程编程实现3. 数据库操作3.1 数据库操作简介3.2 数据库操作实现4. 网络通信4.1 网络通信简介4.2 网络通信实现5. 案例说明5.1 案例1:多线程编程实现5.2 案例2:数据库操作实现5.3 案例3:网络通…...
基于微信小程序的网上订餐管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
python的设计模式
设计模式是解决软件设计中常见问题的可重用解决方案。Python 作为一种灵活且强大的编程语言,支持多种设计模式的实现。以下是 Python 中常见的几种设计模式及其示例: 1. 单例模式(Singleton Pattern) 确保一个类只有一个实例&…...
EventBus事件总线的使用以及优缺点
EventBus EventBus (事件总线)是一种组件通信方法,基于发布/订阅模式,能够实现业务代码解耦,提高开发效率 发布/订阅模式 发布/订阅模式是一种设计模式,当一个对象的状态发生变化时,所有依赖…...
C++解决走迷宫问题:DFS、BFS算法应用
文章目录 思路:DFSBFSBFS和DFS的特点BFS 与 DFS 的区别BFS 的优点BFS 时间复杂度深度优先搜索(DFS)的优点深度优先搜索(DFS)的时间复杂度解释:空间复杂度总结:例如下面的迷宫: // 迷宫的表示:0表示可以走,1表示障碍 vector<vector<int>> maze = {{0, 0,…...
2025春招 SpringCloud 面试题汇总
大家好,我是 V 哥。SpringCloud 在面试中属于重灾区,不仅是基础概念、组件细节,还有高级特性、性能优化,关键是项目实践经验的解决方案,都是需要掌握的内容,正所谓打有准备的仗,秒杀面试官&…...
PostGIS笔记:PostgreSQL 数据库与用户 基础操作
数据库基础操作包括数据模型的实现、添加数据、查询数据、视图应用、创建日志规则等。我这里是在Ubuntu系统学习的数据库管理。Windows平台与Linux平台在命令上几乎无差异,只是说在 Windows 上虽然也能运行良好,但在性能、稳定性、功能扩展等方面&#x…...
Selenium配合Cookies实现网页免登录
文章目录 前言1 方案一:使用Chrome用户数据目录2 方案二:手动获取并保存Cookies,后续使用保存的Cookies3 注意事项 前言 在进行使用Selenium进行爬虫、网页自动化操作时,登录往往是一个必须解决的问题,但是Selenium每次…...
HarmonyOS简介:HarmonyOS核心技术理念
核心理念 一次开发、多端部署可分可合、自由流转统一生态、原生智能 一次开发、多端部署 可分可合 自由流转 自由流转可分为跨端迁移和多端协同两种情况 统一生态 支持业界主流跨平台开发框架,通过多层次的开放能力提供统一接入标准,实现三方框架快速…...