蓝桥杯基本知识——哈希表

一、概念

哈希表是基于键、值对存储的数据结构,底层一般采用的是列表(数组)。
大家都知道,基于列表(数组)的查询速度非常快,时间复杂度是O(1),常量级别的。
列表的底层存储结构是连续的内存区域,只要给定数据在列表(数组)中的位置,就能直接查询到数据。
哈希表适用于解决的问题:给你一个元素,判断在这个集合是否出现过。

二、 使用哈希表解决两类查找问题

查找有无:元素 ‘a’ 是否存在?可以使用 set 集合这种数据结构。
查找对应关系(键值对应):元素 ‘a’ 出现了几次?可以使用 dict 字典这种数据结构。

2.1集合set的使用

leetcode349.两个数组的交集
解题思路

  1. 先将数组1存储在哈希表中
  2. 数组2去遍历查询每一个数组在哈希表里是否出现过
  3. 如果出现过就把它放进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. 第 1 部分我们按照题目的要求做数位分离,求平方和。
  2. 第 2 部分可以使用哈希集合完成。每次生成链中的下一个数字时,我们都会检查它是否已经在哈希集合中。
  3. 如果它不在哈希集合中,我们应该添加它。
  4. 如果它在哈希集合中,这意味着我们处于一个循环中,因此应该返回 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. 存在重复元素
解题思路

  1. 使用 set 集合存储前面遍历过的元素
  2. 对于每个元素 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值