代码随想录 (三)—— 哈希表部分刷题

当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。

  • 数组
  • set (集合)
  • map(映射)

        在java中有就是,hashmap, LinkedHashMap, TreeMap ,HashTable 等

总结一下,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法

但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。

如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!

1. 两个数组的交集

349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的 交集

 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

class Solution {public int[] intersection(int[] nums1, int[] nums2) {/**因为要判断一个元素是不是在另一个集合中的操作,可以使用哈希表来进行操作可以使用 Set集合,存储一个nums1中的元素然后遍历nums2,如果Set中有这个元素,说明是交集元素,则加入交集*/List<Integer> list = new ArrayList<>();Set<Integer> set = new HashSet<>();for(var num1 : nums1) {set.add(num1);}for(var num2 : nums2) {if(set.contains(num2)) list.add(num2);}return list.toArray(new int[0]);}
}

补充:

java中的map:

在 Java 中,主要有以下几种常用的 Map 实现类:
一、HashMap
特点:
        基于哈希表实现,允许使用 null 键和 null 值。
        不保证元素的顺序,特别是在对哈希表进行添加、删除等操作后,元素的顺序可能会发生变化。
查找、插入和删除操作的时间复杂度通常为 O (1),在最坏情况下可能会退化为 O (n),其中 n 是元素的数量。
适用场景:
当对元素的顺序没有要求,只需要快速的存储和检索键值对时非常适用。
二、LinkedHashMap
特点:
继承自 HashMap,同时维护了一个双向链表,保证了元素的插入顺序或者访问顺序。
可以通过构造函数选择是按照插入顺序还是访问顺序(最近访问的元素会被移动到链表尾部)来遍历元素。
与 HashMap 相比,插入和访问稍微慢一些,因为需要维护链表结构。
适用场景:
需要按照插入顺序或者访问顺序遍历键值对时使用。
三、TreeMap
特点:
基于红黑树实现,保证了元素按照键的自然顺序或者指定的比较器顺序进行排序。
不允许使用 null 键,但可以使用 null 值。
查找、插入和删除操作的时间复杂度为 O (log n),其中 n 是元素的数量。
适用场景:
当需要按键的有序顺序遍历键值对时使用,比如实现有序的映射表。
四、Hashtable
特点:
是早期 Java 版本中的同步版本的哈希表实现,不允许使用 null 键和 null 值。
所有方法都是线程安全的,但在单线程环境下性能比 HashMap 低。
适用场景:
在多线程环境下,需要保证线程安全且不允许 null 键值时可以使用,但在现代 Java 中,通常更推荐使用 ConcurrentHashMap 或通过同步包装器对 HashMap 进行同步。
五、ConcurrentHashMap
特点:
高并发环境下的哈希表实现,支持多线程并发访问。
不允许使用 null 键,但可以使用 null 值。
采用了分段锁技术,在保证线程安全的同时,尽量减少锁的粒度,提高并发性能。
适用场景:
在多线程环境下,需要高效地进行并发读写操作时使用。

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

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

相关文章

系统开发基础错题解析二【软考】

目录 前言1.人机界面设计2.架构设计2.1管道过滤器体系2.2仓库风格 3.软件测试相关概念4.白盒测试用例4.14.2 5.测试分类与阶段任务划分6.软件维护类型7.软件质量保证8.软件过程改进 前言 本文专门用来记录本人在做软考中有关系统开发基础的错题&#xff0c;我始终认为教学相长…

利用特征点采样一致性改进icp算法点云配准方法

1、index、vector 2、kdtree和kdtreeflann 3、if kdtree.radiusSearch(。。。) > 0)

平板外壳高精度标签粘贴应用

电子平板、手机等产品的外壳的上常会贴有各式各样的标签&#xff0c;这是电子设备制造业中不可或缺的环节&#xff0c;它不仅关乎产品信息的准确传达&#xff0c;还承载着品牌宣传、防伪追溯等多重功能。通过贴标&#xff0c;设备制造商能够清晰地标注设备的型号、序列号、生产…

通过AI技术克服自动化测试难点(上)

本文我们一起分析一下AI技术如何解决现有的自动化测试工具的不足和我们衍生出来的新的测试需求。 首先我们一起看一下计算机视觉的发展历史&#xff0c;在上世纪70年代&#xff0c;处于技术萌芽期&#xff0c;由字符的识别技术慢慢进行演化&#xff0c;发展到现在&#xff0c;人…

Microbiome | 嫁接植物微生态大揭秘:抗病研究的新思路

在现代农业中&#xff0c;嫁接技术作为一种有效的植物改良方法&#xff0c;已被广泛应用于瓜果种植。然而&#xff0c;嫁接技术背后的微生物学奥秘却鲜为人知。今天&#xff0c;我们将通过一篇《Microbiome》的文章带您深入探讨嫁接西瓜的根际微生物群&#xff0c;了解它们如何…

DMA 详解

目录 一、简介二、STM32 中的 DMA1、DMA 框图1.1 传输方式1.2 仲裁器1.3 数据流1.4 指针递增模式1.5 存储器到存储器模式1.6 DMA 中断 2、DMA 配置 一、简介 DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;顾名思义&#xff0c;就是绕开 CPU 直接…

美国1米DEM地形瓦片数据免费分享(4)-新泽西州

一、简要介绍 新泽西州(英语:State of New Jersey)位于美国中大西洋地区&#xff0c;其命名源自位于英吉利海峡中的泽西岛&#xff0c;昵称为“花园州”。新泽西州亦为美国东部的一个州&#xff0c;北接纽约州&#xff0c;东面大西洋&#xff0c;南向特拉华州&#xff0c;西临…

OpenEBS 实现 PV 动态持久化存储安装

什么是 OpenEBS OpenEBS 将 Kubernetes 工作节点可用的任何存储转换为本地或复制的 Kubernetes 持久卷。OpenEBS 可帮助应用程序和平台团队轻松部署需要快速、高持久性、可靠且可扩展的容器原生存储的Kubernetes 有状态工作负载。 安装OpenEBS 1.所有节点安装iSCSI启动器 yu…

生成式专题的第二节课--DCGAN

一、DCGAN基础概念 DCGAN&#xff08;Deep Convolutional Generative Adversarial Network&#xff0c;即深度卷积生成对抗网络&#xff09;&#xff0c;于2016年提出&#xff0c;是一种深度学习模型&#xff0c;是生成对抗网络&#xff08;GAN&#xff09;的一种变体&#xf…

HarmonyOS NEXT应用元服务开发按钮标注场景

对于用户可点击等操作的任何按钮&#xff0c;如果不是文本类控件&#xff0c;则须通过给出标注信息&#xff0c;包括用户自定义的控件中的虚拟按钮区域&#xff0c;否则可能会导致屏幕朗读用户无法完成对应的功能。 此类控件在进行标注时&#xff0c;标注文本不要包含控件类型、…

干部管理系统:全面提升干部管理效能

数字化浪潮下&#xff0c;干部管理系统作为管理利器&#xff0c;日益凸显其核心价值。该系统全面实现干部信息的数据化&#xff0c;涵盖从基础档案到教育、工作、培训及考核等全方位细节&#xff0c;信息详尽且条理清晰。这不仅极大提升了干部信息查询与更新的效率&#xff0c;…

商标恶意维权形式及应对策略

在商业领域&#xff0c;商标恶意维权的现象时有出现&#xff0c;给正常的市场秩序和企业经营带来了不良影响。以下将介绍其常见形式及应对方法。 一、商标恶意维权的形式1、囤积商标后恶意诉讼。一些人或企业大量注册与知名品牌相似或具有一定通用性的商标&#xff0c;并非用于…

【STL】二叉搜索树模拟实现

BinarySearchTree模拟实现 1 什么是二叉搜索树2 二叉搜索树的插入2.1 插入的流程2.2 插入的代码 3 二叉搜索树的查找3.1 查找的流程3.2 查找的代码 4 二叉搜索树的中序遍历4.1 中序遍历流程4.2 中序遍历代码 5 二叉搜索树的删除5.1 没有孩子 | 有右孩子5.2 没有右孩子5.3 有两个…

广州自闭症寄宿学校有哪些?选择最适合孩子的学校

在广州这座繁华而充满人文关怀的城市里&#xff0c;有一群特殊的孩子&#xff0c;他们被称为“星星的孩子”——自闭症儿童。他们生活在自己的世界里&#xff0c;对外界的刺激反应迟钝或过度敏感&#xff0c;社交互动困难&#xff0c;语言表达受限。然而&#xff0c;在广州&…

医学图像处理入门:VS2019+DCMTK3.6.8编译及环境配置

1. 下载DCMTK的源文件包和支持库 首先下载dcmtk软件包&#xff0c;此处我们下载源码和支持库来进行自己编译。下载网址&#xff1a; https://dicom.offis.de/en/dcmtk/dcmtk-software-development/ 如图所示&#xff0c;选择合适的版本进行下载&#xff0c;此处采用VS2019进行…

5款人声分离免费软件分享,从入门到精通,伴奏提取分分钟拿捏!

人声分离通常是音乐制作、混音和卡拉OK中常用的重要技术之一。它的核心是将乐器伴奏从原始音轨中分离出来&#xff0c;使得用户可以单独处理或重混音频&#xff0c;创造出清晰干净的伴奏轨道。若缺乏强大的音频剪辑软件或专业人声分离工具&#xff0c;这一过程往往会比较困难。…

Xinstall品牌揭秘:如何成为App拉新的行业翘楚?

在移动互联网时代&#xff0c;App作为连接用户与服务的桥梁&#xff0c;其重要性不言而喻。然而&#xff0c;随着市场竞争的加剧&#xff0c;App拉新&#xff08;即吸引新用户下载并使用App&#xff09;的难度也在逐渐增大。传统的营销方式往往面临着成本高、效率低、用户留存差…

前端开发攻略---分块加载大数据

一、问题 解决当遇到较大的数据请求&#xff0c;当用户网络较差的时候&#xff0c;需要等很久很久才能拿到服务器的响应结果&#xff0c;如果这个响应结果需要再页面上展示的话&#xff0c;会导致页面长时间白屏的问题 二、实现原理 当发送一个请求时&#xff0c;需要等服务器把…

照片相册SDK解决方案,模板化包装,简化视频制作流程

专业的视频制作往往门槛较高&#xff0c;让许多用户望而却步&#xff0c;美摄科技推出了全新的照片相册SDK解决方案&#xff0c;旨在通过模板化包装方式&#xff0c;让用户轻松上传照片&#xff0c;快速生成一个充满创意和个性化的照片视频&#xff0c;让每个人都能成为自己生活…

Java的TCP通信

Java的TCP通信 TCP发送数据 Java中的TCP通信 Java对基于TCP协议的的网络提供了良好的封装&#xff0c;使用Socket对象来代表两端的通信端口&#xff0c;并通过Socket产生IO流来进行网络通信。Java为客户端提供了Socket类&#xff0c;为服务器端提供了ServerSocket类 构造方法…