代码随想录 第六天

第一题 https://leetcode.cn/problems/valid-anagram/description/

简单 可以用26位数组模拟哈希表

python 复制代码
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t):
            return False
        map = [0] * 26
        for i in range(len(s)):
            map[ord(s[i]) - ord('a')] += 1
            map[ord(t[i]) - ord('a')] -= 1
        if self.allZero(map):
            return True
        else:
            return False

    def allZero(self, list):
        for char in list:
            if char != 0:
                return False
        return True

第二题 https://leetcode.cn/problems/intersection-of-two-arrays/description/ 求交集

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

python是强大,一行就写完了 https://leetcode.cn/problems/intersection-of-two-arrays-ii/description/

这个是进阶版本的题目

python 复制代码
class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # 统计两个数组中每个数字出现的次数
        cnt1 = Counter(nums1)  # 例如:nums1=[1,2,2,3] -> Counter({2: 2, 1: 1, 3: 1})
        cnt2 = Counter(nums2)  # 例如:nums2=[2,2,3] -> Counter({2: 2, 3: 1})

        # & 运算取交集,保留较小计数
        inter = cnt1 & cnt2    # 结果:Counter({2: 2, 3: 1})
        # 解释:数字 2 在两个数组中都有,出现次数取较小值 2
        #       数字 3 在两个数组中都有,出现次数取较小值 1

        ans = []
        # 将结果展开成列表
        for num, freq in inter.items():
            ans.extend([num] * freq)  # 例如:[2] * 2 = [2, 2]
        return ans  # 返回:[2, 2, 3]

注意append和extend的区别

第三题 快乐数 https://leetcode.cn/problems/happy-number/

python 复制代码
class Solution:
    def isHappy(self, n: int) -> bool:
        seen = set()

        while n != 1 and n not in seen:
            seen.add(n)
            n = sum(int(dight) ** 2 for dight in str(n))

        return n == 1

有可能陷入无限循环,从这受启发应该用set

第四题 https://leetcode.cn/problems/two-sum/ 力扣第一题,学过哈希表的话应该还是很明显能想到用哈希表

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        map = {}
        for i in range(len(nums)):
            if target - nums[i] in map:
                return [map.get(target - nums[i]), i]
            map[nums[i]] = i
        return None
相关推荐
Peter·Pan爱编程8 小时前
10. new_delete 不是 malloc_free 的包装
c++·人工智能·算法
不知名的老吴10 小时前
双栈秒杀表达式的生成方式
数据结构
故事和你9110 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
重生之我是Java开发战士10 小时前
【动态规划】背包问题:完全背包,二位费用的背包问题,似包非包
算法·动态规划
LabVIEW开发10 小时前
LabVIEW实现FDTD 电磁仿真
算法·labview·labview知识·labview功能·labview程序
Together_CZ11 小时前
DTSemNet :Vanilla Gradient Descent for Oblique Decision Trees——用于倾斜决策树的普通梯度下降
算法·决策树·机器学习·vanilla·gradient·dtsemnet·用于倾斜决策树的普通梯度
一条大祥脚11 小时前
ABC459 贪心构造|树形DP|组合数学|贪心|单调栈|势能|前缀和
算法·深度优先
灰灰勇闯IT11 小时前
DeepEP:MoE 推理的 AllToAll 通信瓶颈怎么解
算法·cann
一行代码一行诗++11 小时前
goto语句
java·开发语言·算法
汉克老师12 小时前
GESP5级C++考试语法知识(十七、二分算法提高篇(二))
c++·算法·二分算法·gesp5级·gesp五级·二分算法易错点