【算法刷题】哈希表题型及方法归纳

news2024/11/16 6:25:22

哈希表特点

常见的三种哈希结构:

1、数组:操作简单,方便快捷,但不适于进行一些更复杂的操作。
注:适用于用setmap的情景:(1)当数组大小受限;(2)数组空间足够,但存储键值稀疏;(3)Key值为负数或非正整数。

2、set(集合):仅含有Key,相当于是Value=1的哈希表。常用于判定某一元素是否存在。

3、map(映射):Key-Value形式,常用于计数、存储原始数组的下标等,重点是明确要赋予Value的含义。

(1)数组的定义

在这里插入图片描述

(2)Set的三种定义

在这里插入图片描述
对于要求有序的保证Key有序,使用set,不要求保证Key有序使用unordered_set(该方式的读写效率最高),对于要求含有重复Key的使用multiset

(3)Map的三种定义

在这里插入图片描述
对于要求有序的保证Key有序,使用map,不要求保证Key有序使用unordered_map(该方式的读写效率最高),对于要求含有重复Key的使用multimap

1、数组作为哈希表的题

67、【哈希表】leetcode——242. 有效的字母异位词(C++版本)
本题可利用都为小写字母的条件,根据ASCII码的特点,将每个字符中的数都减去a,映射到0-25当中,设置一个常量级空间大小的数组作为哈希表。

383. 赎金信
思路与242. 有效的字母异位词相同,找到哈希表中可以字母可以拼凑出另一个字符串的字母即可,也利用小写字母的条件,映射到0-25当中。

2、Set作为哈希表的题

68、【哈希表】leetcode——349. 两个数组的交集(C++版本)
目标是寻找两个数组中的去重交集,因此只需要看有无出现相同元素即可,因键值可能会很稀疏,采用unordered_set作为哈希表即可。

69、【哈希表】leetcode——202. 快乐数(C++版本)
本题的关键是出现无限循环数和满足相加为1,对于出现无限循环数条件,相当于是判定是否有再次出现该数,用unordered_set做记录即可。

3、Map作为哈希表的题

(1)答案唯一,不需考虑去重:
70、【哈希表】leetcode——1. 两数之和(C++版本)
要求返回满足相加为target的两个数的下标值,因此需要用map形式存储下标,其中数组中的数作为Key,下标作为Value

(2)允许交集中有重复元素,不需考虑去重:
71、【哈希表】leetcode——350. 两个数组的交集 II(C++版本)
因交集不去重,可存在重复元素,便将对应元素为KeyValue作为对应元素出现的次数。

(3)四个独立数组,不需考虑去重:
72、【哈希表】leetcode——454. 四数相加 II(C++版本)
采用两两相加组成新集合的方式,将四个集合,组合成两个集合,这个题便变为求两集合之和为0。让nums1[i] + nums2[j]构成一个集合,映射成一个Hash表,Key为nums1[i]+nums2[j],Value为该值出现的次数。让nums3[k] + nums4[l]构成另一个集合。符合目标条件的值,变为集合中数值等于0-(nums1[i]+nums2[j])的值。每找到一次满足该值情况,就将集合1中符合该情况的次数相加。

(4)需考虑去重:
均采用先排序,再双指针的方式进行处理

73、【哈希表】leetcode——15. 三数之和(C++版本)
采用排序+双指针的方式,重点是剪枝条件和去重条件。

74、【哈希表】leetcode——18. 四数之和(C++版本)
思路与三数之和相同,区别在于多一层for循环和剪枝与去重条件进行稍微调整。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

powerquery 连接 postgresql

1下载安装postgresql的驱动器 https://pan.baidu.com/s/1ii9PudUs9WL_clP7Ub647Q 提取码:hm6g 2 安装配置odbc 2.1打开控制面板 – 选择管理工具 2.2选择ODBC数据源(64位) 2.3控制面板搜索数据源-单击添加 选择postgresql unicode 2.4配置数据源信息 3.通过e…

einsum 理解

本文是参考以下两篇文章,再结合我自己的经验完成的: 文章一:https://zhuanlan.zhihu.com/p/358417772 文章二:https://zhuanlan.zhihu.com/p/27739282 Einsum介绍: 给定矩阵A 和矩阵B (在Python中也可以说是…

【PCB专题】PCB板卡上的UL标识是什么?

PCB行业中重要的认证之一是UL认证。在网上直接搜索UL会出现很多与防火、安全、保险相关的词汇出现。

开发板测试手册——USB 4G 模块、GPS 定位功能操作步骤详解(3)

目录 4 USB 4G 模块测试 41 4.1 网络功能测试 42 4.2 短信功能测试 43 4.3 GPS 定位功能测试 44 4.4 通话功能测试 45 4.5 测试程序编译 46 5 USB 网口模块测试 47 前 言 本指导文档适用开发环境: Windows 开发环境: Windows 7 64bit 、Windows 10 64bit Linux 开…

C语言进阶内功修炼——深度剖析数据在内存中的存储

🐒个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 目录 🚀1. 数据类型介绍 🌇1.1 类型的基本归类: 🚀2. 整形在内存中的存储 &am…

Three.js学习(一)three.js的一些基本操作

文章目录1.鼠标操作三维场景旋转、移动和缩放2.场景中添加新的三维图形3.设置材质效果4.光源效果1.鼠标操作三维场景旋转、移动和缩放 使用THREE的OrbitControls控件,可以实现鼠标控制三维图形的操作。主要是通过监听鼠标操作,控制相机的三维参数。 imp…

在线问诊呈爆发式增长,聚合支付分账如何助力互联网医疗平台加速发展?

(图源:pexels网站) 随着疫情的放开,人们问诊需求快速上涨,由于医院服务的压力激增,线上问诊成为了不少人替代去医院的有效手段,甚至于线上问诊开始出现了爆发式增长。但是在互联网医疗平台的发展过程中&am…

C语言进阶——数据的存储

目录 一. 数据类型 二. 整形在内存中的存储 1.原码、反码、补码 2.大小端 三. 浮点型在内存中的存储 存储 取出 一. 数据类型 在前面,我们已经学过一些基本的内置类型 char——字符数据类型 short——短整型 int——整形 long——长整形 long…

电路方案分析(十四)汽车电动座椅参考方案设计(H桥,高低边驱动器设计)

汽车电动座椅参考方案设计 tips:TI设计方案参考分析:TI Designs:TIDA-020008 双向和单向电机驱动器的电机驱动应用(如汽车电动座椅)的驱动和控制电路。它演示了如何驱动具有小电路板尺寸、高度可靠性和完整诊断功能的…

第二章 linux常用指令

第二章 linux常用指令一、ls指令:查看目录内容1、作用2、语法3、示例二、pwd命令:查看当前位置1、作用2、语法3、示例三、cd 指令:进入1、作用2、语法3、常用变型四、touch指令:创建文件1、作用2、语法3、常用选项五、mkdir指令&a…

12月VR大数据:兼2022全年VR硬件和应用汇总

Hello大家好,每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么?关注这里就对了。我们会统计Steam平台的用户及内容等数据,每月初准时为你推送,不要错过喔!本数据报告包含:Steam VR硬…

excel查找技巧:单个函数在区间查找中的应用解析

区间取值的问题,在我们日常工作中经常会遇到,比如:销售提成、等级评定、生产标准核定、绩效考核等等,都属于此类问题,今天就给大家介绍几种常用的方式方法,旨在丰富大家知识面的同时,也可以对函…

JavaScript 变量

文章目录JavaScript 变量JavaScript 变量JavaScript 数据类型声明(创建) JavaScript 变量一条语句,多个变量重新声明 JavaScript 变量JavaScript 算数JavaScript 变量 变量是用于存储信息的"容器"。 实例 var x5; var y6; var zx…

BlocProvider add数据流程

我们看看往bloc中添加数据流程&#xff0c;以demo为例 void _incrementCounter() {_counter;BlocProvider.of<TestBloc>(context).add(LoadTestEvent(_counter));} 我们调用了BlocProvider获取对应的Bloc &#xff0c;然后调用他的add方法 void add(Event event) {asser…

【华为重启门】华为/荣耀手机一直自动重启原因解决方案(荣耀V10)

文章目录1.问题描述2.分析原因3.解决方案4.实际操作1.问题描述 荣耀V10&#xff0c;莫名其妙的、无规律的死机重启。 一开始是重启后进入紧急备份&#xff0c;无法正常开机。 之后莫名其妙可以正常开机了&#xff0c;但是总是会重启。 2.分析原因 不搜不知道&#xff0c;一…

Maven安装及配置

1.下载 Maven – Download Apache Maven 2.安装 maven压缩包解压到一个没有中文&#xff0c;空格或其他特殊字符的文件夹内即可使用。 3.配置环境变量 1.右键此电脑->属性->高级系统设置->环境变量 2.新建系统变量MAVEN_HOME 3.编辑系统变量Path&#xff0c;添…

【源码解析】断路器Hystrix使用和工作原理

断路器Hystrix使用和工作原理 介绍 在微服务架构的分布式系统中&#xff0c;众多微服务有复杂的依赖关系&#xff0c;这些依赖在某些情况下不可避免的会出现一些请求失败。当一个依赖由于延迟高出现阻塞&#xff0c;调用该依赖的服务线程就会发生排队阻塞。如果这个时候出现大…

二叉树实现及应用(C语言模拟实现可以存放任意结点的栈、队列,二叉树遍历的递归与非递归实现,附上源码和实验报告,用了自取)

XIAN TECHNOLOGICAL UNIVERSITY 目录 课程设计报告 1绪论 2课程设计目的和内容 3算法的基本思想 1 .建立二叉树结构      建立二叉树时&#xff0c;要先明确是按哪一种遍历规则输入&#xff0c;该二叉树是按你所输入的遍历规则来建立的。本实验用的先序遍历行建树。二叉树…

第六章. 图解数组计算模块Numpy—数据的相关概念和创建数组

第六章. 图解数组计算模块Numpy 6.1 数据的相关概念和创建数组 Numpy是Python数组计算&#xff0c;矩阵运算和科学计算的核心库&#xff0c;它的用途是以数组的形式对数据进行操作&#xff0c;由于Numpy是通过C语言实现的&#xff0c;所以运算速度比较快。 1. Numpy的功能&…

技术贴 | SQL 编译与执行 -parser

前言SQL 编译与执行系列技术博客将按照以下顺序分别介绍整个 SQL 执行引擎。图一 SQL 编译与执行研读流程parser 部分&#xff0c;包括词法解析和语法解析。compile 部分&#xff0c;包括语义解析以及计划的构建。optimize 部分&#xff0c;包括计划的优化。exec 部分&#xff…