代码随想录算法训练营第六天

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

242. 有效的字母异位词

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

内置函数

之前做的时候非常的粗暴直接拿了python的内置函数来写的,就非常的懒。

class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        #return sorted(s) == sorted(t)
        return Counter(s) == Counter(t)

哈希

重新考虑哈希法。
我自己的想法是给两个字符串做一个计数的哈希,其实就是自己把内置函数Counter(s)写了一遍,可能办法不是很好,但效果还可以。

class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        if len(s) != len(t):
            return False
        d1 = {}
        d2 = {}
        for i in s:
            if i not in d1:
                d1[i] = 1
            else:
                d1[i] += 1
        for i in t:
            if i not in d2:
                d2[i] = 1
            else:
                d2[i] += 1
        return d1 == d2

注意,这里可以用defaultdict(int)来创建哈希,就不用和我的代码一样先判断有没有这个元素了,因为defaultdict如果没有这个key也会创建一个然后赋值为0

349. 两个数组的交集

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

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        l = []
        for i in range(len(nums1)):
            if (nums1[i] in nums2) and (nums1[i] not in l):
                l.append(nums1[i])
        return l

Set()

可以直接用个set,set可以的到一个去重之后的列表。
set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
添加元素用set.add()如果元素已经存在,则不报错,也不会添加,不会将字符串拆分成多个元素,去别update。
使用set.update添加一些元组列表,字典等,但不能是字符串,否则会拆分。
set.removeset.discard都是移除函数但是discard如果没有不会报错。
set.pop() 在list里默认删除最后一个,在set里随机删除一个。

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

202. 快乐数

题目链接:快乐数
题目解析:快乐数
这道题的重点其实是可能会无限循环,意思是求和的过程中,有一些sum会重复出现,当开始重复时,那么就开始无限循环了,这一点真的很难想到。

class Solution(object):
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """
        def happy_sum(n):
            n = str(n)
            sum = 0
            for i in n:
                sum += int(i)**2
            return sum
        
        l = []
        while 1:
            n = happy_sum(n)
            if n == 1:
                return True
            elif n in l:
                return False
            l.append(n)

1. 两数之和

暴力解法

题目链接:两数之和
以前就写过一个暴力解,能跑通但比较慢。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        d = len(nums)-1
        for i in range(d):
            for j in range((i+1),(d+1)):
                s = nums[i]+nums[j]
                if s == target:
                    return [i,j]

哈希

这道题,哈希表是用来存放我们遍历过得元素的。
例子:[2,7,3,6], target=9
hash = {}
首先走到2,去哈希表里找一找我们有没有走过7=9-2,没有;
那么把2存进哈希表里,然后去下一个7;
走到7,去哈希表里找一找有没有2=9-7,有,停下return
这里的重点是表里的元素不重复,并不会出现哈希冲突,所以key是元素,value是索引。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        h = {}
        for i in range(len(nums)):
            if target - nums[i] in h:
                return [h[target - nums[i]],i]
            h[nums[i]] = i
        return []
代码随想录算法训练营是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练营中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练营还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练营中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练营中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练营还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练营是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练营每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值