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

ops/2024/12/22 20:56:26/

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

  • 数组
  • 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.ppmy.cn/ops/124065.html

相关文章

npm、yarn、pnpm之间的区别

文章目录 npm、yarn、pnpm之间的区别一、引言二、安装速度1、第一步&#xff1a;速度对比 三、磁盘空间利用2、第二步&#xff1a;磁盘空间利用 四、依赖管理3、第三步&#xff1a;依赖管理方式 五、安全性4、第四步&#xff1a;安全性对比 六、日常使用5、第五步&#xff1a;日…

讯飞星火与昇腾AI双向奔赴:本土化技术创新应对全球化挑战的一次成功验证

文 | 智能相对论 作者 | 陈泊丞 2019年&#xff0c;彼时的AI赛道还不像今天这么热。 这一年&#xff0c;人工智能连续第三年出现在政府工作报告中&#xff0c;政策关键词从“加快”“加强”转变为“深化”&#xff0c;开始进入行业需求快速增长的应用探索期。而华为也在这个…

IO,进程线程面试题

1.标准IO和文件IO的区别 标准IO&#xff1a;调用封装好的相关库函数&#xff0c;来实现数据的输入输出 文件IO&#xff1a;调用系统&#xff08;内核&#xff09;提供的相关函数&#xff0c;来实现数据的输入输出 1、标准IO属于库函数&#xff0c;文件IO属于系统调用 2、标准…

go 的 timer reset

在 Go 语言 1.23 版本之前&#xff0c;与Timer&#xff08;定时器&#xff09;关联的通道是异步的&#xff08;有缓冲&#xff0c;容量为 1&#xff09;。这意味着即使在调用Timer.Stop&#xff08;停止定时器&#xff09;或Timer.Reset&#xff08;重置定时器&#xff09;并返…

基于Arduino的宠物食物分配器

创作本文的初衷是本人的一个养宠物的梦想&#xff08;因为家里人对宠物过敏&#xff0c;因此养宠物的action一直没有落实&#xff09;&#xff0c;但是梦想总是要有的哈哈哈哈哈。上周正好是和一个很好的朋友见面&#xff0c;聊到了养宠物的事情&#xff0c;她大概是讲到了喂宠…

详解RTL design的 CDC和RDC

一、CDC(跨时钟域处理,Clock Domain Crossing) (一)基本原理 时钟域的概念 在芯片设计中,时钟域是由一个时钟信号及其相关逻辑组成的区域。每个时钟域内的电路元件(如寄存器、组合逻辑等)都由同一个时钟信号来同步操作。例如,一个微处理器芯片可能有多个时钟域,如用…

垃圾回收器

一、垃圾回收器的三种类型 1.串行 单线程执行&#xff1a;所有的垃圾回收工作都由单个线程完成&#xff0c;即在进行垃圾回收时&#xff0c;应用程序的其他所有线程都会停止。简单而高效&#xff1a;由于单线程执行&#xff0c;实现上相对简单&#xff0c;适用于小型或中小型…

HTML实现飘动广告效果

上述HTML代码创建了一个简单的网页&#xff0c;其中包含一个可以在页面内自动移动的小方块&#xff08;div元素&#xff09;&#xff0c;并且当鼠标悬停在该方块上时&#xff0c;动画会暂停&#xff1b;当鼠标移开时&#xff0c;动画会继续。以下是代码的详细分析&#xff1a; …