题一:
返回两个数组的交,结果中的每个元素必须是唯一的,答案可以以任意顺序给出。
def intersection(self, nums1, nums2):
# write your code here
nums1 = set(nums1)
nums2 = set(nums2)
nums = nums1 & nums2
nums = list(nums)
return nums
题二:
计算两个数组的交,每个元素出现次数得和在数组里一样,答案可以以任意顺序给出。
一个错误的方法:
def intersection(nums1, nums2):
nums = [i for i in nums1 if i in nums2]
return nums
nums1 = [1, 2, 2, 1]
nums2 = [2]
print intersection(nums1, nums2)
输出应该是 [2]
,但得到得却是 [2, 2]
。
网上经常出现这个,或思路类似的方法。
正确的方法:
def intersection(nums1, nums2):
nums1, nums2 = sorted(nums1), sorted(nums2)
p1 = p2 = 0
nums = []
while p1 < len(nums1) and p2 < len(nums2):
if nums1[p1] < nums2[p2]:
p1 += 1
elif nums1[p1] > nums2[p2]:
p2 += 1
else:
nums += nums1[p1],
p1 += 1
p2 += 1
return nums
思路,排序,双指针。
20180202