Leetcode242, 349, 202, 1

目录

Leetcode 242

初始思路:

学习后:

实现过程

思路一

思路二:

思路三:

Leetcode349

思路:

实现过程:

Leetcode 202

初始思路

学习后

Leetcode 1

初始思路

学习后

 

总结:


Leetcode 242

题目:有效字母异位数

学习资料:代码随想录

初始思路:

  • 利用一个dict字典来存储s字符串,并且记录字符出现个数,遍历t字符串,查找字典,找到对应key后,value减一,如果字符都没有出现直接返回False;最后需要判断字典的value是否都为0,如果有一个不为0,则说明不一样,返回False

学习后:

  • 利用ASCII码,用一个list来存储每个字母出现的次数,然后再遍历减去,再检查是否存在不为0的;利用ASCII码非常有效
  • 直接建立两个字典,然后对比两个字典是否一样,空间复杂度稍微高一点

实现过程

思路一

def isAnagram(self, s: str, t: str) -> bool:
    save = dict()
    if len(s) != len(t):
        return False
    for char in s:
        if char not in save:
            save[char] = 1
        else:
            save[char] +=1

    for char in t:
        if char not in save:
            return False

        else:
            save[char] -= 1
        
    for i in save:
        if save.get(i) != 0:
            return False
    return True

思路二:

        s_dic = dict()
        t_dic = dict()

        for char in s:
            if  char not in s_dic:
                s_dic[char] = 1
            else:
                s_dic[char] += 1

        for char in t:
            if char not in t_dic:
                t_dic[char] = 1
            else:
                t_dic[char] += 1

        return s_dic == t_dic

思路三:

        c = [0] * 26
        for i in s:
            c[ord(i)-ord("a")] += 1 
        for i in t:
            c[ord(i)-ord("a")] -= 1
        for i in c:
            if i !=0:
                return False
        return True

Leetcode349

题目:数组交集

学习资料:代码随想录

思路:

  • 利用set求交集,python中set可以利用逻辑运算符计算

实现过程:

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

Leetcode 202

题目:快乐数

学习资料:代码随想录

初始思路

  • 求和,添加到set里面查看是否有重复
  • 注意按位数计算

学习后

  • 思路基本
 def isHappy(self, n: int) -> bool:

        record = set()
        while True:
            n = self.calculateSUm(n)
            if n == 1:
                return True
            if n not in record:
                record.add(n)
            else:
                return False
            
    

 def calculateSUm(self, nums):

        sum_ = 0
        
        while nums:
            sum_ += (nums % 10)**2
            nums = nums // 10
        return sum_

Leetcode 1

题目:两数之和

学习资料:代码随想录

初始思路

  • 写过太多次了,之前也有博客

学习后

  • 逻辑更加清楚,有理有据的阐述为什么选择dict而不是set
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        re = dict()
        for i in range(len(nums)):
            if target - nums[i] in re:
                return [re[target - nums[i]], i]
            re[nums[i]] = i

 


总结

  • 分清楚,什么时候需要用到hash的思想,一般是想要判断一个元素是否出现在集合中时使用
  • 分清楚什么时候,用set和dict
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值