350. Intersection of Two Arrays II
题目描述和难度
- 题目描述:
给定两个数组,写一个方法来计算它们的交集。
例如:
给定 nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, 返回 [2, 2]
.
注意:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
- 我们可以不考虑输出结果的顺序。
跟进:
- 如果给定的数组已经排好序呢?你将如何优化你的算法?
- 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
- 如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办?
- 题目难度:简单。
- 英文网址:350. Intersection of Two Arrays II 。
- 中文网址:350. 两个数组的交集 II 。
思路分析
求解关键:注意题目中要求“输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致”。
参考解答
参考解答1:使用计数器。
class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
counter = {}
for num in nums1:
counter[num] = counter.get(num, 0) + 1
result = []
for num in nums2:
if num in counter and counter[num] > 0:
result.append(num)
counter[num] -= 1
return result
参考解答2:排序以后,逐个比较。
class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums1.sort()
nums2.sort()
p1 = 0
p2 = 0
l1 = len(nums1)
l2 = len(nums2)
result = []
while p1 < l1 and p2 < l2:
if nums1[p1] < nums2[p2]:
p1 += 1
elif nums1[p1] > nums2[p2]:
p2 += 1
else:
result.append(nums1[p1])
p1 += 1
p2 += 1
return result
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0350-intersection-of-two-arrays-ii ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。