两数组的交 I II (Intersection of Two Arrays I & II)
题目 I:
返回两个数组的交
样例
nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].
python 的set集合就有交集的操作,而且顺带去重,简直爽歪歪,直接用set,一行代码搞定。
class Solution:
"""
@param: nums1: an integer array
@param: nums2: an integer array
@return: an integer array
"""
def intersection(self, nums1, nums2):
# write your code here
return list(set(nums1) & set(nums2))
其他方法数学上等价于把set交集的操作代码重写一遍。
题目 II:
样例
nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].
相比 I 结果没有去重,那就有点麻烦了。
如果用 从nums1遍历 元素 且 in nums2,这样就没考虑到多个重复的元素。
然后就想到双指针遍历,但由于两数组是无序的,那就先排序。
最后模拟下双指针遍历的情况如何取出两数组交的元素,代码就出来了。
class Solution:
"""
@param: nums1: an integer array
@param: nums2: an integer array
@return: an integer array
"""
def intersection(self, nums1, nums2):
# write your code here
nums1.sort()
nums2.sort()
res = []
j = 0 # 指针2
for i, num1 in enumerate(nums1):
while j < len(nums2):
if nums2[j] > num1:
break
elif nums2[j] == num1:
res.append(num1)
j += 1
break
else:
j += 1
return res