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

发布时间:2024年01月16日


242.有效的字母异位词

在这里插入图片描述

写题的感受

这道题,如果从解决问题的角度来说,用python的话,我个人觉得还是比较简单的。因为python丰富的内置函数能很轻易的解决问题。 但是时间复杂度就不能保证,如果保证时间复杂度,还是要使用map,也就是字典。

使用python内置函数的解法

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        number = "abcdefghijklmnopqrstuvwxyz"
        for i in number:
            if s.count(i) != t.count(i):
                return False
        return True

使用字典的解法

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t):
            return False
        
        number = "abcdefghijklmnopqrstuvwxyz"
        sdict = {}
        for i in number:
            sdict[i] = 0
        for i in s:
            sdict[i] += 1
        for i in t:
            sdict[i] -= 1
        for i in number:
            if sdict[i] != 0:
                return False
        return True

349. 两个数组的交集

在这里插入图片描述

写题感受

这道题,我的第一反应就是使用set。然后,求交集就行了。

代码

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        a = set(nums1)
        b = set(nums2)
        c = set.intersection(a,b)
        c = list(c)
        return c

202. 快乐数

在这里插入图片描述

写题的感受

这道题我之前遇到过,当时就没有写出来,今天又遇到了,鉴于之前没有想出来,今天又看了一会,就没看了。直接看了题解。看了后才恍然大悟。今天算是第二次遇到这种情况了,现在还是想再说一下。leetcode刷题,里面常常会标注重点内容,也就是加粗字体。这些字体往往就是解题的关键。

然后就是再说说这道题,如果想求出快乐数,关键在于无限循环这四个字上,如果无限循环了,然后循环里面还有没有1,就说明这个数必不是快乐数。如果有1,就说明是快乐数。

代码

class Solution:
    def isHappy(self, n: int) -> bool:
        numsdict = {}
        while n != 1:
            n = self.calculate(n)
            if n not in numsdict:
                numsdict[n] = 0
            else:
                numsdict[n] += 1

            if numsdict[n] >= 2:
                return False
        return True

    def calculate(self, n: int):
        n = str(n)
        sum = 0
        for i in n:
            sum += int(i) ** 2
        return sum

1. 两数之和

在这里插入图片描述

写题的感受

两数之和作为力扣里面的第一题,大家应该都写过。这道题主要是两种解法。一种是用暴力解法,双重for循环嘛,时间复杂度就是O(n).
另外一种就是使用哈希表。使用哈希表查询的时间就是O(1)

暴力法

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            a = target - nums[i]
            for j in range(len(nums)):
                if i != j:
                    if a == nums[j]:
                        return [i,j]

哈希表解法

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = dict()
        for i, num in enumerate(nums):
            if target - num in hashtable:
                return [hashtable[target - num], i]
            hashtable[nums[i]] = i
        return []

总结

我现在差不多慢了一天的进度吧,现在天天都好累。然后也不想写了。代码随想录,坚持一周了。
还剩下7周,加油。

文章来源:https://blog.csdn.net/wish_you_luck/article/details/135611894
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。