Python判断列表A中是否有元素出现在了列表B中

目录

  • 1. 问题重述
  • 2. 问题求解
    • 2.1 暴力法
    • 2.2 哈希表法
    • 2.3 集合法
  • 3. 总结

1. 问题重述

给定两个列表 A A A B B B,它们的长度分别为 n n n m m m。我们要检查的是,是否存在 x ∈ A x\in A xA,使得 x ∈ B x\in B xB

以下介绍若干种方法并记录下相应的耗时。

测试数据为:

A = list(range(1, 10**7 + 1))
B = list(reversed(range(10**7, 2 * 10**7)))

2. 问题求解

2.1 暴力法

遍历 A A A,然后判断 A A A 中的每个元素是否出现在了 B B B 中。

def check(A, B):for num in A:if num in B:return Truereturn False

时间复杂度为 O ( n m ) O(nm) O(nm)。预估耗时 480000 480000 480000 秒。

2.2 哈希表法

考虑到哈希表的查找是 O ( 1 ) O(1) O(1) 的,我们可以将 B B B 变为哈希表。

def check(A, B):B = set(B)for num in A:if num in B:return Truereturn False

构建哈希表需要 O ( m ) O(m) O(m) 的时间,所以总时间复杂度为 O ( n + m ) O(n+m) O(n+m)。实际耗时约为 0.51 ∼ 0.53 0.51\sim0.53 0.510.53 秒。

鉴于构造的数据具有对称性,即使一开始选择对 A A A 构造哈希表,最终的耗时也几乎一致。

2.3 集合法

原问题等价于: ∃ x ∈ set ( A ) , s.t. x ∈ set ( B ) \exists \,x\in \text{set}(A),\; \text{s.t.}\, x\in\text{set}(B) xset(A),s.t.xset(B),即 set ( A ) ∩ set ( B ) ≠ ∅ \text{set}(A)\cap \text{set}(B)\neq \varnothing set(A)set(B)=

def check(A, B):A = set(A)B = set(B)return bool(A.intersection(B))

计算交集需要 O ( min ⁡ ( n , m ) ) O(\min(n,m)) O(min(n,m)) 的时间,总时间复杂度同样为 O ( n + m ) O(n+m) O(n+m)。实际耗时约为 0.5 0.5 0.5 秒左右,比上一种方法略快。

3. 总结

下表总结了各个方法的速度比较:

方法耗时(秒)
暴力法 ≈ 480000 \approx480000 480000
哈希表法 0.51 ∼ 0.53 0.51\sim0.53 0.510.53
集合法 0.5 0.5 0.5

如果有更快的方法欢迎在评论区补充~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java项目maven打包的包名设置(finalname标签的使用)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

C#用Array类的Reverse方法反转数组中元素

目录 一、Array.Reverse 方法 1.重载 2.Reverse(Array, Int32, Int32) 3. Reverse(Array) 4.Reverse(T[]) 5. Reverse(T[], Int32, Int32) 二、实例 1.Array.Reverse 方法4种重载方法综合实例 2.Reverse(Array)方法的实例 一、Array.Reverse 方法 反转一维 Array 或部…

wireshark分析数据包:追踪流

打开追踪流的界面 方法 1 方法 2 选中数据包,右键弹出菜单 说明: 流内容的显示顺序和它在网络上出现的顺序相同。不可打印的字符被点代替。从客户端到服务器的流量被标记为红色,而从服务器到客户端的流量被标记为蓝色。这些颜色可以通过下…

numpy基础之transpose

1 numpy基础之transpose 用法 ndarray.transpose(*axes)描述 根据axes将ndarray数组进行转置。 入参 axes:可选,元组或列表。若指定,则元素个数必须为数组轴大小(ndarray.ndim),元素值的范围为[0,1,2,…,ndarray.ndim-1]&…

Python(22)正则表达式中的“限定符”

大家好!我是码银🥰 欢迎关注🥰: CSDN:码银 公众号:码银学编程 获取资源:公众号回复“python资料” 限定符功能?匹配前面的字符0次或1次匹配前面的字符1次或多次*匹配前面的字符0次或多次{n…

R语言rmarkdown使用

1、安装 install.packages(rmarkdown) library(rmarkdown) install.packages(tinytex) tinytex::install_tinytex() 2、新建R Markdown 3、基本框架 红色框内为YAML:包括标题、作者和日期等 黄色框内为代码块:执行后面的代码,并可以设置展…

适用于 Windows 的 6 款 iPhone 数据恢复软件

数据恢复 已经取得了长足的进步。从仅提供恢复数据的可能性到保证数据恢复,有许多适用于 Windows的第三方 iPhone 数据恢复软件。 大多数软件都是高级工具,但是提供了出色的数据恢复解决方案。从iPhone恢复数据非常简单。 只需将 iPhone 连接到您的计算…

11 串口发送应用之使用状态机实现多字节数据发送

1. 使用串口发送5个字节数据到电脑 uart协议规定,发送的数据位只能是6,7,8位,如果数据位不符合,接收者接收不到数据。所以我们需要将40位数据data分为5个字节数据分别发送,那么接收者就能通过uart协议接收…

开源的直播平台

​​​​​​直播平台系统界面介绍 开源一套直播平台 私信可获取源码

C语言使⽤ scanf()函数应注意的问题是什么?

一、问题 scanf()函数的基本格式和格式符,在使⽤时应注意什么问题呢? 二、解答 那么具体该注意哪些问题呢?下⾯来看⼀下⽐较常见的⼀些错误。 1、不能控制精度 与 printf()函数不同,scanf()函数输⼊实数时,是不能控制…

qt/c++实现拓扑排序可视化

💂 个人主页:pp不会算法^ v ^ 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 实现功能 1、选择文件导入初始数据 2、逐步演示 3、排序完成输出…

多线程基础详解(看到就是赚到)

🎥 个人主页:Dikz12📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 创建线程 1.创建类继承Thread,重写run() 2.实现Runnable,重写run() 3.继承Thread,使用匿名内部类 …

问题:A注册会计师必须在期中实施实质性程序的情形是()。 #学习方法#其他

问题:A注册会计师必须在期中实施实质性程序的情形是()。 A.甲公司整体控制环境不佳 B.将期中实质性程序所获证据与期末数据进行比较 C.评估的认定层次重大错报风险很高 D.没有把握通过在期中…

Linux 36.2@Jetson Orin Nano基础环境构建

Linux 36.2Jetson Orin Nano基础环境构建 1. 源由2. 步骤2.1 安装NVIDIA Jetson Linux 36.2系统2.2 必备软件安装2.3 基本远程环境2.3.1 远程ssh登录2.3.2 samba局域网2.3.3 VNC远程登录 2.4 开发环境安装 3. 总结 1. 源由 现在流行什么,也跟风来么一个一篇。当然&…

C++自定义函数详解

个人主页:PingdiGuo_guo 收录专栏:C干货专栏 铁汁们新年好呀,今天我们来了解自定义函数。 文章目录 1.数学中的函数 2.什么是自定义函数 3.自定义函数如何使用? 4.值传递和引用传递(形参和实参区分) …

Spring Boot项目Jar包加密:防止反编译的安全实践

文章目录 1. 引言2. 背景3. Jar包加密方案3.1 使用Java混淆工具3.2 使用Jar包加密工具3.2.1 示例:使用JCryptor对Jar包进行加密 4. 加密后的Jar包的运行5. 安全性与性能考虑5.1 安全性考虑5.2 性能考虑 6. 拓展功能与未来展望6.1 数字签名与验签6.2 使用加密算法库 …

代码随想录算法训练营第四十五天(动态规划篇)|01背包

01背包理论基础 学习资料:代码随想录 (programmercarl.com) 相关链接:题目页面 (kamacoder.com) 背包题目分类 01背包定义 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次…

Android:ViewAdapter

3.11 View&Adapter View是视图文件,表示页面的框架结构。Adapter适配器,通过适配器填充数据信息。 1、简单ListView使用 ListView用来显示一个相同样式的视图列表。 ListView无法直接将数据显示,需要先将Data数据放入Adapter适配器,然后ListView绑定适配器。 操作步骤…

企业飞书应用机器人,使用python自动发送文字内容到群消息

文章目录 创建企业应用与开通机器人飞书发送信息的工具函数 创建企业应用与开通机器人 需要先创建应用,然后进入应用后,点击添加应用能力创建机器人: 参考官方文档,获取两个参数:app_id与app_secret 官方说明文档&…

JAVA面试题12

Java 中的静态关键字(static)的作用是什么? 答案: 静态关键字可以修饰变量、方法和代码块。静态变量在类加载时创建,所有实例共享同一个副本。静态方法不依赖于实例,可以直接通过类名调用。静态代码块在类加…