一、哈希表基础知识
1. 哈希表概念
- 略
二、哈希表知识扩展
1. 哈希表的设计
- 略
哈希表题目 | 哈希表的设计
题目一:插入、删除和随机访问都是O(1)的容器
设计一个数据结构,使如下三个操作的时间复杂度都是O(1)
;insert(value)
:如果数据集中不包含一个数值,则把它添加到数据集中。remove(value)
:如果数据集中包含一个数值,则把它删除。getRandom()
:随机返回数据集中的一个数值,要求数据集中每个数字被返回的概率都相同。
题目分析
难度: 略
思路: 略
参考代码
Tips:2024-02-05 22:03
题目二:最近最少使用缓存
请设计实现一个最近最少使用(Least Recently Used, LRU)
缓存,要求如下两个操作的时间复杂度都是O(1)
;get(key)
:如果缓存中存在键key
,则返回它对应的值;否则返回-1
。put(key, value)
:如果缓存中之前包含键key
,则它的值设为value
;否则添加键key
及对应的值value
。在添加一个键时,如果缓存容量已经满了,则在添加新键之前删除最近最少使用的键(缓存中最长时间没有被使用过的元素)。
题目分析
难度: 略
思路: 略
参考代码
Tips:2024-02-05 22:11
2. 哈希表的应用
- 略
哈希表题目 | 哈希表的应用
题目一:有效的变位词
给定两个字符串s
和t
,请判断它们是不是一组变位词。在一组变位词中,它们中的字符及每个字符出现的次数都相同,但字符的顺序不能相同。例如,anagram
和nagaram
就是一组变位词。
题目分析
难度: 略
思路: 略
参考代码
Tips:2024-02-05 22:12
题目二:变位词组
给定一组单词,请将它们按照变位词分组。例如,输入一组单词["eat","tea","tan","ate","nat","bat"]
,这组单词可以分成3组,分别是["eat","tea","ate"]
、["tan","nat"]
和["bat"]
。假设单词中只包含英文小写字母。
题目分析
难度: 略
思路: 略
参考代码
Tips:2024-02-05 22:12
题目三:外星语言是否排序
有一门外星语言,它的字母表刚好包含所有的英文小写字母,只是字母表的顺序不同。给定一组单词和字母表顺序,请判断这些单词是否按照字母表的顺序排序。例如,输入一组单词["offer","is","coming"]
,以及字母表顺序"zyxwvutsrqponmlkjihgfedcba"
,由于字母o
在字母表中位于i
的前面,因此单词"offer"
排在"is"
的前面;同样,由于字母i
在字母表中位于c
的前面,因此单词"is"
排在"coming"
的前面。因此,这一组单词是按照字母表顺序排序的,应该输出true
。
题目分析
难度: 略
思路: 略
参考代码
Tips:2024-02-05 22:15
题目四:最小时间差
给定一组范围在00:00
至23:59
的时间,求任意两个时间之间的最小时间差。例如,输入时间数组["23:50","23:59","00:00"]
,"23:59"
和"00:00"
之间只有1分钟的间隔,是最小的时间差。
题目分析
难度: 略
思路: 略
参考代码
Tips:2024-02-05 22:16
三、章节小结
略