代码随想录训练营打卡第六天|242.有效的字母异位词 ,349. 两个数组的交集,202. 快乐数,1. 两数之和

哈希表|242.有效的字母异位词 ,349. 两个数组的交集, 202. 快乐数,1. 两数之和

文档链接:代码随想录
做题感悟:

  • 判断哪些元素是否出现过就用哈希表
  • 可以使用数组、集合、字典,均可以快速判断元素是否存在
    两数之和比较巧妙:在遍历数组的同时,查询元素是否存在,仅仅使用一次遍历就能判断元素是否出现过。
  • 有关字典的基础操作,容易忘:
    dit.get(key,value)寻找字典中key是否存在,并指定函数返回值value.
    dit.keys()返回字典的key列表
    dit.value()返回字典的value值
    ans=[],ans.append(a)将元素a推入栈内
    ans.pop()将第一个元素推出去

题目一:242.有效的字母异位词 ——30min

题目链接:题目
文档链接:文档
视频讲解:视频

在这里插入图片描述

  • 先遍历数组,得到字典
  • 比较两个字典是否一致
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        ditS={}
        ditT={}
        for i in s:
            if ditS.get(i):#如果找到了
                ditS[i] += 1
            else: ditS[i] = 1#如果返回None,找不到这个健,get函数用于查询该键是否存在,并可以规定返回值
        for i in t:
            if ditT.get(i):
                ditT[i] += 1
            else: ditT[i] = 1
        print(ditS,ditT)
        return ditS==ditT
#18:17——18:33:有空总结一下字典的使用方法,以及其他表示哈希表的方法

题目二:349. 两个数组的交集—30min

题目链接:题目
文档链接:文档
视频讲解:视频

在这里插入图片描述

  • 先将列表遍历,存到字典中
  • 在遍历列表,查询另一个链表中的元素。
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        #先遍历其中一个列表,梳理其中的元素
        #在遍历链表中的键
        dict1={}
        dict2={}
        ans=[]
        for i in nums1:
            if dict1.get(i):#如果找得到
            
                dict1[i] += 1
            else:dict1[i] = 1

        for i in nums2:
            if dict2.get(i):#如果找得到
                dict2[i] += 1
            else:dict2[i] = 1

        for j in dict1.keys():
            print(j)
            if dict2.get(j):#如果在dict2中能找到
                ans.append(j)

        return ans

题目三:202. 快乐数—1.5h

题目链接:题目
文档链接:文档
视频讲解:无

在这里插入图片描述

  • 此处使用集合,
  • record=set()初始化集合,注意区分字典初始化dict={}
  • record.add()通过该代码为集合增加元素
  • 注意快乐数的加和重复,就会陷入死循环。反之就是快乐数。
class Solution:
    def isHappy(self, n: int) -> bool:
        #要记录是否和值会出现循环
        record = set()#定义一个集合,{}是定义一个字典
        while True:
            n = self.getSum(n)# 先计算总和
            if n == 1: return True # 最后是1就可以返回
            if n in record: return False #如果出现了重复,就会陷入死循环            
            else: record.add(n)
                     
    def getSum(self, n: int) -> int:
        n_str = str(n) # 将整数变为字符串
        sum = 0
        for i in n_str:
            sum += int(i) ** 2
        return sum

题目四:1.两数之和——1.5h

题目链接:题目
文档链接:代码
视频讲解:视频

在这里插入图片描述

  • 整体思路:
    1、遍历数组的同时,判断该元素在字典中是否存在匹配的的元素。
    2、一遍遍历元素,同时查询字典不会二次遍历,如果先合成字典,在遍历查询是否有匹配的元素,就会漏掉相同元素,索引不同的情况
    3、如果存在匹配的元素,则返回当前索引以及匹配值的索引,如若不存在,则放入字典中。
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        #先遍历数组,查询字典中是否又匹配的值,没有则放入字典中
        #如果需要快速查找元素,就用哈希表
        dict={}
        for i in range(len(nums)):
            j=target-nums[i]
            if dict.get(j) == None:# 如果没找到
                dict[nums[i]]=i
            else:#如果没找到,就重新加入   
                return [i,dict[j]]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值