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

讲解

​ ● 哈希表理论基础

​ ● 242.有效的字母异位词

​ ● 349. 两个数组的交集

​ ● 202. 快乐数

​ ● 1. 两数之和

题目链接:242. 有效的字母异位词

  • 将字母转为哈希表位置,出现次数为数值
  • 通过数值加减,判断字母数是否多出或少于
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        record = [0]*26
        for zm in s:
            record[ord(zm)-ord('a')] += 1
        for zm in t:
            record[ord(zm)-ord('a')] -= 1
        for i in range(26):
            if record[i] != 0:
                return False
        return True

题目链接:349. 两个数组的交集

  • 将数组转为集合,去除重复数字后判断
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums11 = set(nums1)
        nums22 = set(nums2)
        result = []
        for num in nums11:
            if num in nums22:
                result.append(num)
        return result
  • 直接用集合运算

    x = set(‘abracadabra’)

    y = set(‘bgdhgds’)

    x & y # 交集

    x | y # 并集

    x - y # 差集

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        return list(set(nums1) & set(nums2))

题目链接:202. 快乐数

  • 使用集合
class Solution:
    def isHappy(self, n: int) -> bool:
        recode = set()
        while n != 1:
            sum = 0
            for i in str(n):
                sum += int(i)**2
            if sum in recode:
                return False
            recode.add(sum)
            n = sum
        return True

题目链接:1. 两数之和

  • 使用index方法获取下标
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            num = target-nums[i]
            if num in nums:
                index = nums.index(num)
                if i != index:
                    return [i,index]
  • 使用set
  • enumerate()内置函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

enumerate(sequence, [start=0])
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dic = enumerate(nums)
        saw = set()
        for i,num in dic:
            n1 = target - num
            if n1 in saw:
                return [nums.index(n1),i]
            saw.add(num)
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值