代码随想录day6 哈希表

文章讲述了在编程中,特别是在处理LeetCode问题时,如何利用哈希法(如数组、Set和Map)快速判断元素是否在集合中,以及在242题有效字母异位词和349题两个数组交集中,如何运用哈希表数据结构(Set)实现高效去重。特别提到Python中正确计算字符ASCII值的方法。
摘要由CSDN通过智能技术生成
  • 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法 。  这句话很重要,大家在做哈希表题目都要思考这句话。 
Leetcode:242.有效的字母异位词
  • 涉及哈希的3个数据结构:数组,set,map
  • 数组(key连续+范围可控),set(key范围很大),map(key对应value)
  • Python定义有初始值的数组:hash = [0]*26
  • ord('a')获取ASCII:在Python中,s[i]-'a'这样的表达式会导致TypeError,因为Python不允许直接将字符(str类型)与字符串(str类型)进行减法运算。正确的做法是使用ord(s[i]) - ord('a')来获取字符对应的ASCII值之差

Leetcode: 349. 两个数组的交集

完整答案

    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set1 = set(nums1)

        res = set()
        for num in nums2:
            if num in set1:
                res.add(num)
        return res
  • 本题如无“key<1000”这一条件,则只能用set;当有了这一条件,则数组和set都可以用,从效率&性能上来说,数组优于set.
  • 我们选择set最为存储结果的数据结构,是看重其“去重”的功能。
  • Python统一记忆:元组( ),列表[ ],字典和集合{ }。记忆,字典最大最多(包含一切汉字)的集合,所以用大括号。但需要注意的是,字典是键值对,集合是单个元素。
  • 集合(set)是一个无序的不重复元素序列。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或者也可以使用 set() 函数创建集合。
  • 集合(set): set1 = {1, 2, 3, 4};集合初始化:res = set()
  • 字典:d = {key1 : value1, key2 : value2 }
  • ——————————
  • 思路分析:本题用到了哈希表集合set。本题代码随想录给出的解法1,适应了字典和集合两种,其实没必要,全部用set就好。set本身就是一种哈希表数据结构。
  • 程序中,我们使用哈希表数据结构(set)而不用列表list的原因是,哈希表数据结构的查找效率是O(1)非常高效。
  • 使用set作为输出数据结构的原因是,题干输出的结果要求“不可重复”,而set本身就是一个无序不重复的数据结构,天然帮助我们去重了。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值