返回

LeetCode 算法之旅:亲手实践两个数组交集,用哈希表写出帅气解法!

后端

题目概述

给定两个整数数组 nums1nums2,返回两个数组的交集。换句话说,您需要找出两个数组中共同拥有的元素。

例如:

nums1 = [1, 2, 2, 1]
nums2 = [2, 2]
交集为 [2, 2]

哈希表简介

哈希表(也称为散列表)是一种数据结构,它利用一个哈希函数将元素的键映射到一个唯一的哈希值,从而实现快速地查找、插入和删除元素。哈希函数旨在尽量减少碰撞,即不同的键映射到同一个哈希值的情况。

在 Python 中,字典是一种现成的哈希表实现。我们可以利用字典的特性,将 nums1 数组中的元素作为键,并将这些键映射到一个布尔值 True。然后,我们可以遍历 nums2 数组,并检查每个元素是否在 nums1 哈希表中。如果在,我们就将该元素添加到交集结果中。

代码实现

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

    # 创建一个哈希表来存储 nums1 中的元素
    nums1_hash = {}
    for num in nums1:
        nums1_hash[num] = True

    # 创建一个列表来存储交集结果
    intersection = []

    # 遍历 nums2 数组
    for num in nums2:
        # 检查 num 是否在 nums1_hash 中
        if num in nums1_hash:
            # 如果在,就将 num 添加到交集结果中
            intersection.append(num)

    # 返回交集结果
    return intersection


# 测试代码
nums1 = [1, 2, 2, 1]
nums2 = [2, 2]
print(intersection(nums1, nums2))  # 输出:[2, 2]

算法分析

时间复杂度:

在最坏的情况下,算法需要遍历两个数组中的所有元素。因此,时间复杂度为 O(m + n),其中 mn 分别是 nums1nums2 数组的长度。

空间复杂度:

算法需要创建一个哈希表来存储 nums1 数组中的元素。因此,空间复杂度为 O(m),其中 mnums1 数组的长度。

结语

在本文中,我们使用哈希表数据结构解决了“两个数组的交集”这一 LeetCode 算法题。通过详细的代码示例和讲解,您应该对哈希表的使用以及如何解决此类算法问题有了一个清晰的了解。

哈希表是一种非常重要的数据结构,在许多算法和数据处理场景中都有着广泛的应用。希望您能通过本文对哈希表的理解,在未来的算法学习和编程实践中不断精进,取得更辉煌的成就!