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

2023-11-26 03:30

本文主要是介绍【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

这篇关于【Python3】【力扣题】349. 两个数组的交集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/425054

相关文章

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2