当前位置: 首页 > news >正文

【Python3】【力扣题】349. 两个数组的交集

【力扣题】题目描述:

【Python3】代码:

1、解题思路:集合的交集。两个数组都转为集合,获取集合的交集。

知识点:set(...):转为集合,集合的元素不重复。

              集合1.intersection(集合2):获取两个集合都有的元素,即两集合的交集。也可以:集合1 & 集合2。

              list(...):转为列表。

class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:res = set(nums1) & set(nums2)return list(res)# 或者res = set(nums1).intersection(set(nums2))return list(res)

2、解题思路:遍历数组,依次判断元素是否在另一个数组中,用新列表记录两个数组都有的元素。

知识点:集合推导式:用简洁的方法创建集合,集合中的元素不能重复。{ 对元素的简单操作 for 变量 in 可迭代对象 if 条件 }

              列表推导式:用简洁的方法创建列表,列表中的元素可以重复。[ 对元素的简单操作 for 变量 in 可迭代对象 if 条件 ]

class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:aset = set(nums1)res = {x for x in nums2 if x in aset}return list(res)# 或者aset, bset = set(nums1), set(nums2)return [x for x in bset if x in aset]

也可遍历长度短的数组,以提升一点速度。

class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:aset = set(nums1)bset = set(nums2)return self.set_intersection(aset,bset)def set_intersection(self,set1,set2):if len(set1) > len(set2):return self.set_intersection(set2,set1)return [x for x in set1 if x in set2]

注解:集合推导式、列表推导式

# 集合推导式
res = {x for x in nums2 if x in aset}
# 相当于:
res = set()
for x in nums2:if x in aset:res.append(x)
print(res)# 列表推导式
res = [x for x in bset if x in aset]
# 相当于:
res = []
for x in bset:if x in aset:res.append(x)
print(res)

3、解题思路:排序+双指针。将两数组都排序,依次比较两数组中的元素大小。若相同,则用新列表记录;若不同,则较小数字的指针往后移,继续比较,直到两数组所有元素比较结束。

知识点:列表.sort():在原列表基础上,将元素按从小到大排序。

              len(列表):获取列表长度,即列表中有多少元素。

              列表.append(...):往列表尾部添加元素。

class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:res = []nums1.sort()nums2.sort()len_1, len_2 = len(nums1), len(nums2)index_1, index_2 = 0, 0while index_1 < len_1 and index_2 < len_2 :val_1 = nums1[index_1]val_2 = nums2[index_2]if val_1 == val_2 and val_1 not in res:res.append(val_1)index_1 += 1index_2 += 1elif val_1 < val_2:index_1 += 1else:index_2 += 1return res

相关文章:

  • flink的集成测试
  • Redis-主从与哨兵架构
  • 孩子学习过程中一些代码记录
  • LLMLingua:集成LlamaIndex,对提示进行压缩,提供大语言模型的高效推理
  • RabbitMQ之发送者(生产者)可靠性
  • 【运维面试100问】(六)buffer和cache的区别
  • 在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问
  • 加载minio中存储的静态文件html,不显示样式与js
  • 基于51单片机超声波测距汽车避障系统
  • IBM X3650M4安装ESXI6.5卡在/lsl_mr3.v00
  • 泛型边界的问题
  • leetcode - 2232. Minimize Result by Adding Parentheses to Expression
  • C#中的警告CS0120、CS0176、CS0183、CS0618、CS8600、CS8602、CS8604、CS8625及处理
  • 分布式篇---第六篇
  • ​Spring Boot 分片上传文件
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • HTTP中GET与POST的区别 99%的错误认识
  • Laravel5.4 Queues队列学习
  • LeetCode算法系列_0891_子序列宽度之和
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 构造函数(constructor)与原型链(prototype)关系
  • 官方解决所有 npm 全局安装权限问题
  • 机器学习学习笔记一
  • 力扣(LeetCode)56
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 思维导图—你不知道的JavaScript中卷
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 选择阿里云数据库HBase版十大理由
  • ​configparser --- 配置文件解析器​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (MATLAB)第五章-矩阵运算
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (SpringBoot)第二章:Spring创建和使用
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (九十四)函数和二维数组
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (一)Neo4j下载安装以及初次使用
  • (转)程序员技术练级攻略
  • (转)可以带来幸福的一本书
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net MVC4 上传大文件,并保存表单
  • .Net程序帮助文档制作
  • .Net面试题4
  • .net中调用windows performance记录性能信息
  • .skip() 和 .only() 的使用
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)