返回

LeetCode 2215. 寻找两个数组的不同之处(Python)

后端

题目

给你两个数组 nums1nums2 ,数组中元素均为非负整数。请你找出 nums2 中那些 未出现在 nums1 中的元素,并以数组形式返回结果。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2,1,3]
输出:[3]

示例 2:

输入:nums1 = [2,4,6,8], nums2 = [1,3,5,7]
输出:[1,3,5,7]

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

解法一:使用列表

思路:

  1. 首先,我们可以将 nums1nums2 中的元素分别保存到两个集合 set1set2 中。
  2. 然后,我们可以使用集合的差集操作 set2 - set1 来求出 nums2 中那些 未出现在 nums1 中的元素。
  3. 最后,我们将差集中的元素转换为列表并返回。

代码:

def find_difference(nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: List[int]
    """

    # 将 nums1 和 nums2 中的元素分别保存到两个集合 set1 和 set2 中
    set1 = set(nums1)
    set2 = set(nums2)

    # 使用集合的差集操作 set2 - set1 求出 nums2 中那些未出现在 nums1 中的元素
    difference = set2 - set1

    # 将差集中的元素转换为列表并返回
    return list(difference)

解法二:使用列表

思路:

  1. 首先,我们可以使用 nums1nums2 中的元素构建一个字典 dict1,其中键是元素,值是元素出现的次数。
  2. 然后,我们可以遍历 nums2 中的元素,如果元素不在 dict1 中或其出现次数为 0,则该元素就是我们要求的元素。
  3. 最后,我们将这些元素收集到列表中并返回。

代码:

def find_difference(nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: List[int]
    """

    # 使用 nums1 和 nums2 中的元素构建一个字典 dict1,其中键是元素,值是元素出现的次数
    dict1 = {}
    for num in nums1:
        if num not in dict1:
            dict1[num] = 0
        dict1[num] += 1

    # 遍历 nums2 中的元素,如果元素不在 dict1 中或其出现次数为 0,则该元素就是我们要求的元素
    difference = []
    for num in nums2:
        if num not in dict1 or dict1[num] == 0:
            difference.append(num)

    # 返回结果
    return difference

总结

这道题考察了对列表和集合的基本操作,提供了两种解法,分别使用列表和集合来求解。通过这篇文章,您学习到了如何使用 Python 的列表和集合来高效地解决问题。