代码随想录算法训练营第6天 | 242有效的字母异位词、349两个数组的交集、202快乐数、1两数之和

常见的hash结构

1、数组:范围可控,较小
2、set(集合):数值很大
3、map
当我们遇到了要快速判断一个元素是否出现集合里的时候、是否出现过的场景就要考虑哈希法。

242、有效的字母异位词

文档讲解: 有效的字母异位词
视频讲解:有效的字母异位词
状态:看讲解

思路

1、这道题就是判断两个词包含的字母是不是一模一样

困难

1、该题范围较小(26个字母),可以使用数组
2、分别遍历两个词,for i in a:把每个字符转成下标+1或-1,最后判断数组是否全部为0
3、不需要知道ASCII码,都是小写字母,取相对值即可,ord(i)-ord(“a”),前面的i是变量不要加引号,后面的是字母a,要加引号

总结/笔记

Python有五个标准的数据类型:可以执行数据类型之间的转换
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组): ();
可变数据(3 个):List(列表):[]、Dictionary(字典):{}、Set(集合):set() 。


349、两个数组的交集

文档讲解: 两个数组的交集
视频讲解:两个数组的交集
状态:看讲解

思路

1、找到两个数组重合的值即可

困难

1、如果只用一个,因为每个数组的相同值也有多个,不好判断是否是存在两个数组的,所以引入两个hash数组。

总结/笔记

python的列表操作 result = [ ]
1、list.append(obj):在列表末尾添加新的对象
2、list.count(obj):统计某个元素在列表中出现的次数
3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置
5 list.insert(index, obj):将对象插入列表
6 list.pop([index=-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7 list.remove(obj):移除列表中某个值的第一个匹配项
8 list.reverse():反向列表中元素
9 list.sort(cmp=None, key=None, reverse=False):对原列表进行排序


202、快乐数

「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。

文档讲解: 快乐数
状态:无思路

思路

题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。
所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。

困难

1、本题数量级较大,不能用数组来做hash了,考虑用set(),不重复数
2、首先定义一个计算和的函数,返回值就是新的n
3、如果n==1,返回True;如果n!=1,如果set中已经存在则表示已经陷入循环,返回False,如果不存在,就加到set中。

总结/笔记

python中set的操作函数:
增:person.add(“student”)
person.add((1,23,“hello”)) #可以添加元组,但不能是list
删:person.remove(“student”),如果不存在 ,会报错。
person.discard(“student”)#功能和remove一样,好处是没有的话,不会报错
person.pop() #在list里默认删除最后一个,在set里随机删除一个。
改:person.update((1,3)) #可以使用update添加一些元组列表,字典等。但不能是字符串,否则会拆分,例如person.update(“abc”),会将字符串拆分成a,b,c三个元素


1、两数之和

文档讲解: 快乐数
视频讲解:快乐数
状态:写一半

思路

1、遍历到一个数,自然的是想看target-value有没有存在过,这就要用hash了,不过由于本题还要返回下标,要记录两个值,所以采用map/字典的数据结构。

困难

1、因为要找的是有没有出现过值,所以map中key是数组的值,value是下标。
2、元素只能用一遍,像6=3+3这种就很容易错,所以应该先找,再把当前值加入到map中。

总结/笔记

python中字典的用法:
初始化:records = dict() 或者 records = {}
赋值:records[key] = value
更新:update() 方法可使用一个字典所包含的 key-value 对来更新己有的字典。
删除:del scores[‘语文’]
是否存在:key in dicts
清空:cars.clear()
获取:cars.get(‘BMW’),不存在不会报错,items()、keys()、values() 分别用于获取字典中的所有 key-value 对、所有 key、所有 value

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值