代码随想录day5 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

本文介绍了如何使用Python解决LeetCode中的三个问题:判断两个字符串是否为字母异位词(利用Counter),计算两个数组的交集(暴力法与哈希表),以及找到两个数之和(哈希表优化)。
摘要由CSDN通过智能技术生成
本文章所用到的语言为python

242.有效的字母异位词 

题目链接:242. 有效的字母异位词 - 力扣(LeetCode)

思路:这个题在python中有多种解法 这一种是最简单的 我们用collections中的counter函数 这个函数可以直接输出字符串中的字符的种类以及对应的数量 下面是代码

from collections import Counter
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        t_counter=Counter(t)
        s_counter=Counter(s)
        return t_counter==s_counter

349. 两个数组的交集 :

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

第一个思路:这里我们可以采用暴力法用两个for循环遍历 首先我们创造一个空列表a让nums1与nums2相等的元素添加到列表a里面 由于取的是交集 不能出现重复元素 所以我们用and nums1[i] not in a 来避免出现重复元素 下面是代码

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

第二个思路:我们用哈希表与集合 创造一个hashmap={} 用for遍历nums1 用hashmap[i]=hashmap.get(i,0)+1 nums1里面的元素添加到hashmap里面作为value 并且每添加一次 次数+1 随后创造一个集合res=set() 因为集合里面不能出现重复的元素 所以我们将nums2与nums1里面都存在的元素直接加入到集合里面就可以 最后以列表的形式返回

下面是代码

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        hashmap={}
        for i in nums1:
            hashmap[i]=hashmap.get(i,0)+1
        res=set()
        for j in nums2:
            if j in hashmap:
                res.add(j)
        return list(res)

1. 两数之和 

题目链接:1. 两数之和

第一个思路:暴力法遍历  就不多写了 下面是代码

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

第二个思路:哈希表 我们创造一个hashmap={} 用for index,num in enumerate(nums) (这里enumerate函数的作用是让index与num一一对应 ,将其组合为一个索引序列,可以同时获得索引和值  但此时hashmap里面是空的) 我们假设a+b等于target 那么让a存在于nums里面 判断是否有a+b等于target 就可以用target-a 是否存在于nums里面 依靠这个思路 我们用 if target-num in hashmap 来判断是否存在这样一个b 如果存在就return [hashmap[target-num],index] 因为这里需要返回一个列表 而且列表里面是下标 但由于此时hashmap是空的 我们就在外面加上一个hashmap[nums[index]]=index (这个的作用是让hashmap中为nums[index] 值 对应上index的键 这样在enumerate这个函数中也可以生成索引序列 ) 最后在代码的尾部加上return[](这里是因为有存在nums里面无法找出可以和成target的值 于是返回一个空列表)

下面是代码

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashmap={}
        for index,num in enumerate(nums):
            if target-num in hashmap:
                return [hashmap[target-num],index]
            hashmap[nums[index]]=index
        return[]

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值