LeetCode icon indicating copy to clipboard operation
LeetCode copied to clipboard

题目归类

Open ylqi007 opened this issue 10 months ago • 3 comments

ylqi007 avatar Jan 22 '25 06:01 ylqi007

Data Structure Design

这两题考查我们对于实现哈希表,有哪些方法,分别有什么利弊? 实现哈希表的原理,其实我们会遇到一个抉择,那就是时间和空间的取舍。

实现方式有两种:

  • 超大数组:不考虑空间复杂度,创建超大数组,每个数都能单独存入,且不会位置冲突。
  • 链地址法:空间/时间的最佳实践,基于数组实现,并且通过一个 hash 函数生成一个对应的索引,当多个数索引一致的时候,再处理冲突问题,一般我们使用链地址法解决冲突。

为了实现哈希集合这一数据结构,有以下几个关键问题需要解决:

  • 哈希函数:能够将集合中任意可能的元素映射到一个固定范围的整数值,并将该元素存储到整数值对应的地址上。
  • 冲突处理:由于不同元素可能映射到相同的整数值,因此需要在整数值出现「冲突」时,需要进行冲突处理。总的来说,有以下几种策略解决冲突:
    • 链地址法:为每个哈希值维护一个链表,并将具有相同哈希值的元素都放入这一链表当中。
    • 开放地址法:当发现哈希值 h 处产生冲突时,根据某种策略,从 h 出发找到下一个不冲突的位置。例如,一种最简单的策略是,不断地检查 h+1,h+2,h+3,… 这些整数对应的位置。
    • 再哈希法:当发现哈希冲突后,使用另一个哈希函数产生一个新的地址。 扩容:当哈希表元素过多时,冲突的概率将越来越大,而在哈希表中查询一个元素的效率也会越来越低。因此,需要开辟一块更大的空间,来缓解哈希表中发生的冲突。

以上内容读者可以自行翻阅数据结构的教材,本题解不再阐述,而是直接给出一个最简单的哈希表实现。

Reference

  • 御三五: https://leetcode.cn/problems/design-hashmap/solutions/654720/wu-tu-guan-fang-tui-jian-ti-jie-she-ji-h-guuw/
  • 力扣官方题解: 设计哈希集合

ylqi007 avatar Jan 24 '25 03:01 ylqi007

Top K

Method 1: PriorityQueue Method 2: Bucket Sort Method 3: QuickSelect

ylqi007 avatar Jan 25 '25 02:01 ylqi007