leedcode-两个数组的交集 II

自己写的:
复制代码
from typing import List


class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # 如果 nums1 或 nums2 为空列表,则返回空列表
        if not nums1 or not nums2:
            return []

        mylist = list()  # 创建一个空列表用于存放交集元素
        hash_num1 = {}  # 创建一个空字典用于存放 nums1 中元素的出现次数
        hash_num2 = {}  # 创建一个空字典用于存放 nums2 中元素的出现次数

        # 统计 nums1 中每个元素的出现次数
        for i in nums1:
            if not hash_num1.get(i):  # 如果 i 不在 hash_num1 中
                hash_num1[i] = 1  # 则将 i 加入 hash_num1,并设置出现次数为 1
            elif i in hash_num1:  # 如果 i 已经在 hash_num1 中
                hash_num1[i] += 1  # 则将 i 的出现次数加 1

        # 统计 nums2 中每个元素的出现次数
        for i in nums2:
            if not hash_num2.get(i):  # 如果 i 不在 hash_num2 中
                hash_num2[i] = 1  # 则将 i 加入 hash_num2,并设置出现次数为 1
            elif i in hash_num2:  # 如果 i 已经在 hash_num2 中
                hash_num2[i] += 1  # 则将 i 的出现次数加 1

        # 找到两个字典中共同的键
        common_keys = set(hash_num1.keys()) & set(hash_num2.keys())

        # 遍历共同的键,将其添加到结果列表中
        for i in common_keys:
            temp = 0  # 用于记录共同键的出现次数
            # 如果共同键在 nums1 和 nums2 中出现的次数不同,则取较小值
            if hash_num1.get(i) >= hash_num2.get(i):
                temp = hash_num2.get(i)
            else:
                temp = hash_num1.get(i)
            # 将共同键按照出现次数添加到结果列表中
            for j in range(temp):
                mylist.append(i)

        return mylist  # 返回结果列表
复制代码

 gpt优化过的版本:

复制代码
from typing import List

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # 如果 nums1 或 nums2 为空列表,则返回空列表
        if not nums1 or not nums2:
            return []

        mylist = []  # 创建一个空列表用于存放交集元素
        hash_num1 = {}  # 创建一个空字典用于存放 nums1 中元素的出现次数

        # 统计 nums1 中每个元素的出现次数
        for i in nums1:
            hash_num1[i] = hash_num1.get(i, 0) + 1

        # 遍历 nums2,查找是否存在于 nums1 中出现过的元素
        for i in nums2:
            # 如果当前元素在 hash_num1 中存在且出现次数大于 0
            if i in hash_num1 and hash_num1[i] > 0:
                mylist.append(i)  # 添加到结果列表中
                hash_num1[i] -= 1  # 更新出现次数

        return mylist
复制代码

 双指针法:

复制代码
class Solution:
    def intersect(self, nums1: [int], nums2: [int]) -> [int]:
        nums1.sort()  # 对 nums1 排序,方便后续比较
        nums2.sort()  # 对 nums2 排序,方便后续比较
        result = []  # 创建一个空列表用于存放交集元素
        ptr1, ptr2 = 0, 0  # 分别表示 nums1 和 nums2 的索引
        # 当 nums1 和 nums2 都还有元素未比较时
        while ptr1 < len(nums1) and ptr2 < len(nums2):
            if nums1[ptr1] < nums2[ptr2]:  # 如果 nums1 中当前元素小于 nums2 中当前元素
                ptr1 += 1  # 移动 nums1 的指针
            elif nums1[ptr1] == nums2[ptr2]:  # 如果两个元素相等
                result.append(nums1[ptr1])  # 将该元素添加到结果列表中
                ptr1 += 1  # 同时移动两个列表的指针
                ptr2 += 1
            else:  # 如果 nums1 中当前元素大于 nums2 中当前元素
                ptr2 += 1  # 移动 nums2 的指针
        return result  # 返回交集结果列表
复制代码

 

posted @   Junior_bond  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示