题目描述
小鱼同学学习了并集和交集的概念。
(1)数组的并集:给定两个数组A,B ,把他们所有的元素合并在一起,并按照从小到大排序组成的集合,叫做数组A与数组B的并集;比如:数组{1,2,3}和{2,3,4}的并集是{1,2,3,4}。
(2)数的交集:给定两个数组 A,B,由所有属于数组 A 且属于数组B 的元素,并按照从小到大排序组成的集合,所组成的集合,叫做集合A与集合B的交集;比如:数组{1,2,3}和{2,3,4}的交集为{2,3}。
现给定2个数组,每个数组都含有若干不重复的元素,请分别求出两个数组的并集和交集(测试数据确认两个集合一定有交集)。
输入描述
第一行有两个整数m 和 n(m,n 都是10∼1000之间的整数),分别代表A,B 两个数组的长度。
第二行有m个整数,代表A数组存储的整数,用空格隔开。
第三行有n个整数,代表B数组存储的整数,用空格隔开。
注:两个集合的数都是大于等于0小于等于10000的整数。
输出描述
第一行输出两个数组的并集,用空格隔开这些元素。
第二行输出两个数组的交集,用空格隔开这些元素。
用例输入
3 4
2 1 3
5 4 3 2
用例输出
1 2 3 4 5
2 3
解题思路
- 定义两个数组A、B,并读入数组长度和数组元素;
- 分别对数组A、B进行排序;
- 定义一个空集合union_set,用来存储两个数组的并集;
- 定义一个空集合intersect_set,用来存储两个数组的交集;
- 遍历数组A,判断数组B中是否存在该元素:
- 如果存在,则将该元素加入intersect_set;
- 如果不存在,则将该元素加入union_set;
- 遍历数组B,判断数组A中是否存在该元素:
- 如果不存在,则将该元素加入union_set;
- 对union_set和intersect_set进行排序;
- 输出union_set和intersect_set中的元素。
代码实现
m, n = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
A.sort()
B.sort()
union_set = set()
intersect_set = set()
for num in A:
if num in B:
intersect_set.add(num)
else:
union_set.add(num)
for num in B:
if num not in A:
union_set.add(num)
union_set = sorted(union_set)
intersect_set = sorted(intersect_set)
print(' '.join(map(str, union_set)))
print(' '.join(map(str, intersect_set)))
复杂度分析
- 时间复杂度为O(m+n),其中m、n分别为数组A和B的长度;
- 空间复杂度为O(m+n),用来存储union_set和intersect_set。
© 版权声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:317608094@qq.com
THE END
暂无评论内容