一、概念
哈希表是基于键、值对存储的数据结构,底层一般采用的是列表(数组)。
大家都知道,基于列表(数组)的查询速度非常快,时间复杂度是O(1),常量级别的。
列表的底层存储结构是连续的内存区域,只要给定数据在列表(数组)中的位置,就能直接查询到数据。
哈希表适用于解决的问题:给你一个元素,判断在这个集合是否出现过。
二、 使用哈希表解决两类查找问题
查找有无:元素 ‘a’ 是否存在?可以使用 set 集合这种数据结构。
查找对应关系(键值对应):元素 ‘a’ 出现了几次?可以使用 dict 字典这种数据结构。
2.1集合set的使用
leetcode349.两个数组的交集
解题思路
- 先将数组1存储在哈希表中
- 数组2去遍历查询每一个数组在哈希表里是否出现过
- 如果出现过就把它放进result这个集合中
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
a=set(nums1)
b=set(nums2)
c=a&b
return list(c)
leecode202.快乐数
解题思路
可以用集合 set 来记录之前出现的数字。
- 第 1 部分我们按照题目的要求做数位分离,求平方和。
- 第 2 部分可以使用哈希集合完成。每次生成链中的下一个数字时,我们都会检查它是否已经在哈希集合中。
- 如果它不在哈希集合中,我们应该添加它。
- 如果它在哈希集合中,这意味着我们处于一个循环中,因此应该返回 false。
class Solution:
def isHappy(self, n):
ss = set()
while True:
if n == 1:
return True
total = 0
while n:
total += (n % 10) * (n %10)
n = n // 10
if total in ss:
return False
ss.add(total)
n = total
leetcode217. 存在重复元素
解题思路
- 使用 set 集合存储前面遍历过的元素
- 对于每个元素 num[i],判断是否在前面的 recode 中,如果存在,返回 True。
class Solution:
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
n = len(nums)
if n <= 1:
return False
recode = set

最低0.47元/天 解锁文章
917

被折叠的 条评论
为什么被折叠?



