算法题(Python)哈希表 | 2.两个数组的交集

算法题(Python)哈希表 | 2.两个数组的交集

题目描述

力扣题目链接

给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。
示例1:

复制代码
输入:nums1 = [1, 2, 2, 1], nums = [2, 2]
输出:[2]

示例2:

复制代码
输入:nums1 = [4, 9, 5], nums = [9, 4, 9, 8, 4]
输出:[9, 4]
解释:[4, 9]也是可以通过的

提示:

复制代码
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000

思路

本题,主要要学会使用一种哈希数据结构:unordered_set。

注意题目特意说明:输出结果中的每个元素一定是唯一的,也就是说,输出的结果是去重的,同时可以不考虑输出结果的顺序。

需要注意的是:使用数组做哈希的题目,是因为题目都限制了数值的大小。如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。

此时需要使用另一种结构体,set,关于set,C++提供了如下三种可用的数据结构:

  • std::set
  • std::multiset
  • std::unordered_set
    std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表,使用unordered_set读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。
    思路如下图所示:

    代码如下:
python 复制代码
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # 使用数组
        count1 = [0] * 1001
        count2 = [0] * 1001

        result = []
        for i in range(len(nums1)):
            count1[nums1[i]] += 1
        for i in range(len(nums2)):
            count2[nums2[i]] += 1
        for k in range(1001):
            if count1[k] * count2[k] > 0:
                result.append(k)
        
        return result
python 复制代码
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # 使用哈希表存储一个数组中的所有元素
        table = {}
        for num in nums1:
            table[num] = table.get(num, 0) + 1
        
        # 使用集合存储结果
        res = set()
        for num in nums2:
            if num in table:
                res.add(num)
                del table[num]
        
        return list(res)
相关推荐
高级程序源1 分钟前
springboot大学生体测系统72170-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
打工仔折腾 AI14 分钟前
极空间用 Docker 部署 Photopea:网页版 PS 的私有化实践
运维·后端·python·docker·容器·langchain·ai agent 实战
Eiceblue22 分钟前
使用 Python 实现 Excel 行列转置(保留单元格样式)
前端·python·excel
WeiXin_DZbishe24 分钟前
基于Node.js的马拉松赛事管理系统的设计与实现-计算机毕设 附源码【课程设计】90211
java·javascript·vue.js·python·php·课程设计
zhenaibo52129 分钟前
如何与导师有效沟通选题?
算法
熊猫钓鱼>_>34 分钟前
大学图论第 6 讲:网络流与二分图匹配——对偶性让瓶颈自己现形
开发语言·算法·面试·职场和发展·图论·校招·面经
计算机编程指导师39 分钟前
计算机毕设选题推荐:基于Spark+Django的黄金价格历史数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·python·计算机·spark·django·课程设计·黄金价格
没有钱的钱仔40 分钟前
最大似然估计(MLE)通俗理解
算法·机器学习·概率论
yi0111 小时前
LeetCode 424. 替换后的最长重复字符|不定长滑动窗口:如何判断窗口是否合法?
笔记·python·算法·leetcode·双指针·滑动窗口
计算机编程指导师1 小时前
计算机毕设怎么做?基于Spark+Django的股票数据分析与可视化系统实战指导 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·python·spark·django·毕业设计·股票·课程设计